妈得我是这个世界上最唐的人
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