WA 80 求调
查看原帖
WA 80 求调
755574
ZXZ_楼主2024/8/21 22:05
#include<bits/stdc++.h>
#define N 201
#define ll long long
using namespace std;
int n,m,head[N],tot,cnt[N][N];
ll dis[N][N];
struct edge{int to,nxt,w;}e[N*(N+1)];
inline void add(int u,int v,int w){
    e[++tot].to=v;
    e[tot].w=w;
    e[tot].nxt=head[u];
    head[u]=tot;
}
bitset<N>mn[N][N];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            dis[i][j]=dis[j][i]=1e18;
    for(int i=1;i<=m;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        add(u,v,w);
        add(v,u,w);
        dis[u][v]=dis[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)continue;
                else if(i==k)continue;
                else if(j==k)continue;
                if(dis[i][j]-dis[k][j]>dis[i][k]){
                    dis[i][j]=dis[i][k]+dis[k][j];
                    mn[i][j].reset();
                    mn[i][j]=mn[i][k]|mn[k][j];
                    mn[i][j][k]=true;
                    cnt[i][j]=1;
                }else if(dis[i][j]-dis[i][k]==dis[k][j]&&k!=j&&k!=i)cnt[i][j]++;
            }
    // for(int i=1;i<=n;i++)
    //     for(int j=i+1;j<=n;j++)
    //             for(int k=1;k<=n;k++)
    //                 printf("%d %d %d %d %d\n",i,j,dis[i][j],k,(mn[i][j][k]>0));
    int ans=0;
    bool flag=false;
    for(int i=1;i<=n;i++){
        bool bz=false;
        for(int j=1;j<=n&&!bz;j++)
            if(j!=i)
                for(int k=1;k<=n;k++)
                    if(k!=i&&k!=j&&cnt[j][k]==1)
                        if(mn[j][k][i]){ans++,bz=true,printf("%d ",i),flag=true;break;}
    }
    if(!flag)puts("No important cities.");
    return 0;
}   
2024/8/21 22:05
加载中...