蒟蒻不会floyd求助

P1841 [JSOI2007] 重要的城市

妈得我是这个世界上最唐的人 1. 上面代码可以看出来,我甚至没有更新最短路! 2. 让输出方案我输出个数,。。。而且由于我的错误代码输出还正好是2以为过了样例 3. 没有特判i!=j&&j!=k&&i!=k 4. 改完这些所有的我才90分,想四 ```cpp #include<bits/stdc++.h> using namespace std; const int N=210; int n,m,g[N][N],ans[N],tt; vector<int> K[N][N]; bool st[N];int cnt; signed main(){ scanf("%d%d",&n,&m); int u,v,w; memset(g,0x3f,sizeof(g)); while(m--){ scanf("%d%d%d",&u,&v,&w); g[u][v]=g[v][u]=w; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(i==j||j==k||i==k) continue; if(g[i][j]>g[i][k]+g[k][j]){ g[i][j]=g[i][k]+g[k][j]; K[i][j].clear();K[j][i].clear(); K[i][j].push_back(k); K[j][i].push_back(k); } else if(g[i][j]==g[i][k]+g[k][j]) K[i][j].push_back(k),K[j][i].push_back(k); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(K[i][j].empty()) continue; bool flag=1;int last=-1; for(int k:K[i][j]){ if(!(last==-1||k==last)){ flag=0;break; } else last=k; } if(flag&&!st[K[i][j][0]]){ ans[++tt]=K[i][j][0]; cnt++,st[K[i][j][0]]=1; } } if(!cnt){ printf("No important cities."); return 0; } sort(ans+1,ans+tt+1); for(int i=1;i<=tt;i++) printf("%d ",ans[i]); return 0; } ``` WAon4
by Kniqht @ 2023-10-31 13:26:45


|