求助,未解之谜了,看着可对
查看原帖
求助,未解之谜了,看着可对
308658
whcc楼主2021/7/14 15:40

神犇们求助

本蒟蒻菜死了

未解之谜

改了两天了

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stdio.h>
#include<algorithm>
const int INF=0x3f3f3f3f;
using namespace std;
struct edge {
    int to ,l;
    edge(int v=0,int w=0) {
        to=v;
        l=w;
    }
};
vector <edge> dg[5000];
int dis[5000];
int vis[5000];
int cnt[5000];
int n,m;
void spfa(int s) {
    memset(dis,INF,sizeof(dis));
    memset(vis,0,sizeof(vis));
    memset(cnt,0,sizeof(cnt));
    queue<int> q;
    dis[s]=0;
    q.push(s);
    cnt[s]=1;
    vis[s]=1;
    while(!q.empty()) {
        int u=q.front();
        q.pop() ;
        vis[u]=0;
        for(int v=0; v<dg[u].size() ; v++) { 
            int to=dg[u][v].to;
            if(dis[u]+dg[u][v].l<dis[to]) { 
                dis[to]=dis[u]+dg[u][v].l;
                if(vis[to]==0) {
                    vis[to]=1;
                    q.push(to);
                    cnt[to]++;
                    if(cnt[to]>n) { 
                        cout<<"YES"<<endl;
                        return ;
                    }
                }

            }
        }
    }
    cout<<"N0"<<endl;
    return ;

}
int  main() {
//  freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
    int t;
    cin>>t;

    while(t--) {
        cin>>n>>m;
        int a,b,c;
        while(m--) {
            cin>>a>>b>>c;
            dg[a].push_back(edge(b,c));
            if(c>=0) {
                dg[b].push_back(edge(a,c));
            }
        }
        spfa(1);
        for(int i=1; i<=n; i++) {
            dg[i].clear() ;
        }
    }
    return 0;
}
2021/7/14 15:40
加载中...