YXD123456789 @ 2024-04-01 17:26:22
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 7e6 + 5;
const int K = 1e6;
struct node{
int nxt,v,w;
};
struct Node{
int l,r;
};
Node tr[N];
node e[N];
int head[N];
int cnt;
bool st[N];
int dist[N];
int id[N];
int n,m,start;
int xu = 4e6 + 4;
int aa,bb,cc,dd;
void add(int u,int v,int w)
{
cnt ++;
e[cnt].nxt = head[u];
e[cnt].v = v;
e[cnt].w = w;
head[u] = cnt;
}
void build(int u,int l,int r)
{
tr[u].l = l;tr[u].r = r;
if(l == r)
{
id[l] = u;
return ;
}
add(u , u << 1 , 0),add(u , u << 1 | 1 , 0);
add((u << 1) + K , u + K , 0),add((u << 1 | 1) + K , u + K , 0);
int mid = (l + r) >> 1;
build(u << 1 , l , mid);
build(u << 1 | 1 , mid + 1 , r);
}
void update1(int u,int l,int r)
{
if(tr[u].l > r || tr[u].r < l)
{
return ;
}
if(tr[u].l >= l && tr[u].r <= r)
{
add(u + K , xu , 1);
return ;
}
update1(u << 1 , l , r);
update1(u << 1 | 1 , l , r);
return ;
}
void update(int u,int l,int r)
{
if(tr[u].l > r || tr[u].r < l)
{
return ;
}
if(tr[u].l >= l && tr[u].r <= r)
{
add(xu , u , 1);
return ;
}
update(u << 1 , l , r);
update(u << 1 | 1 , l , r);
return ;
}
void dij(int start)
{
memset(st , false , sizeof st);
priority_queue<pair<int,int> > que;
memset(dist , 0x3f , sizeof dist);
dist[start] = 0;
que.push(make_pair(0 , start));
while(!que.empty())
{
int k = que.top().second;que.pop();
if(st[k]) continue;
st[k] = 1;
for(int j = head[k];j;j = e[j].nxt)
{
int v = e[j].v;
int w = e[j].w;
if(w + dist[k] < dist[v])
{
dist[v] = w + dist[k];
que.push(make_pair(-dist[v] , v));
}
}
}
return ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n >> m >> start;
build(1 , 1 , n);
for(int i = 1;i <= n;i ++)
{
add(id[i] + K , id[i] , 0);
add(id[i] , id[i] + K , 0);
}
while(m --)
{
cin >> aa >> bb >> cc >> dd;
xu ++;
update(1 , aa , bb);
update1(1 , cc , dd);
xu ++;
update(1 , cc , dd);
update1(1 , aa , bb);
}
dij(id[start] + K);
for(int i = 1;i <= n;i ++)
{
cout << dist[id[i]] / 2 << "\n";
}
return 0;
}
by Nagasaki_Soyo @ 2024-04-01 17:42:51
@YXD123456789
by YXD123456789 @ 2024-04-01 17:49:04
嗷嗷了解,感谢大佬
by YXD123456789 @ 2024-04-01 17:51:30
已过,感谢提醒