日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

codeforces1472 G. Moving to the Capital

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces1472 G. Moving to the Capital 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

G. Moving to the Capital

先bfs一邊,求出距1號點的最短路用數組d1[]記錄,求的過程中如果當前點t遍歷到之前遍歷過的點j意味著這條邊就是能夠拉近與1號點距離的邊(橫向邊或者后向邊)那么就用d1[j]更新d2[t],d2[]表示最終求得答案。

然后反向邊建圖,從上面bfs的葉子節點開始,就像“撥葉子”一樣更新d2[]

注意:反向建圖跑bfs的更新條件

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<stack> #include<queue> #include<random> #include<bitset> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> #include<unordered_set> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=200010,M=2*N; const ll mod=1e9+7; int n,m; int h1[N],h2[N],e[M],ne[M],idx; int d1[N],d2[N]; bool st[N],in[N]; void add(int h[],int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++; } queue<int> q; void bfs() {for(int i=1;i<=n;i++)in[i]=st[i]=0,d1[i]=-1,d2[i]=0x3f3f3f3f;d1[1]=d2[1]=0;q.push(1);while(q.size()){int t=q.front();q.pop();int cnt=0;for(int i=h1[t];i!=-1;i=ne[i]){int j=e[i];if(d1[j]!=-1){d2[t]=min(d2[t],d1[j]);continue;}cnt++;d1[j]=d2[j]=d1[t]+1;q.push(j);}if(!cnt) st[t]=1;}for(int i=1;i<=n;i++)if(st[i]) {q.push(i);in[i]=1;}while(q.size()){int t=q.front();q.pop();in[t]=0;for(int i=h2[t];i!=-1;i=ne[i]){int j=e[i];if(d1[t]>d1[j]){d2[j]=min(d2[t],d2[j]);if(!in[j]) q.push(j);in[j]=1;}}} } int main() {IO;int T=1;cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) h1[i]=h2[i]=-1;idx=0;while(m--){int a,b;cin>>a>>b;add(h1,a,b);add(h2,b,a);}bfs();for(int i=1;i<=n;i++) cout<<d2[i]<<' ';cout<<'\n';}return 0; }

要加油哦~

總結

以上是生活随笔為你收集整理的codeforces1472 G. Moving to the Capital的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。