自测RE洛谷WA求
查看原帖
自测RE洛谷WA求
566354
XILOU_HEZHAO楼主2022/7/22 11:23
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

const int MAXN = 1e5+7;

int T;
int n,m;
int u,v,w;

struct node{
    int v,w;
};

vector<node > e[MAXN];

queue<int > q;

int cnt[MAXN],dis[MAXN];
bool vis[MAXN];

void add(int u,int v,int w){
    e[u].push_back((node){v,w});
}

void init(){
    memset(dis,0x3f,sizeof(dis));
    memset(vis,false,sizeof(vis));
    memset(cnt,0,sizeof(cnt));
    scanf("%d%d",&n,&m);
    for(int i = 1;i <= n;i++){
        e[i].clear();
    }
    for(int i = 1;i <= n;i++){
        scanf("%d%d%d",&u,&v,&w);
        w >= 0?add(u,v,w),add(v,u,w):add(u,v,w);
    }
}

bool spfa(){
    dis[1] = 0,vis[1] = true;
    q.push(1);
    while(!q.empty()){
        int u = q.front();
        q.pop(),vis[u] = 0;
        for(long long unsigned i = 0;i < e[u].size();i++){
            node ed = e[u][i];
            int v = ed.v, w = ed.w;
            if(dis[v] > dis[u] + w){
                dis[v] = dis[u] + w;
                cnt [v] = cnt[u] +1;
                if(cnt[v] >= n) return false;
                if(!vis[v]) q.push(v),vis[v] = true;
            }
        }
    }
    return true;
}

int main(){
    freopen("P3385_1.in","r",stdin);
    scanf("%d",&T);
    while(T--){
        init();
        spfa()?printf("NO\n"):printf("YES\n");
    }
    fclose(stdin);
    return 0;
}

2022/7/22 11:23
加载中...