萌新求助,11分,只过了第一个点, 不是多组数据没清空的问题。。。。吧
查看原帖
萌新求助,11分,只过了第一个点, 不是多组数据没清空的问题。。。。吧
455490
Sharpsmile楼主2021/10/6 17:10

RT 代码如下 马蜂不好,请见谅

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#define Inf 1e8;
using namespace std;
struct edge{long long  v,val,next;}e[500001];
long long  f[500100];
long long  n;
void build(long long  u,long long  v,long long  val,long long  id){
    e[id].v=v;
    e[id].val=val;
    e[id].next=f[u];
    f[u]=id;
}
bool vis[50100];
long long  di[50100];
long long  sum[50100];
bool spfa(){
    queue<long long> q;
    while(!q.empty())q.pop();
    vis[0]=1;
    di[0]=0;
    q.push(0);
    while(!q.empty()){
      
        long long  id=q.front();
        q.pop();
        vis[id]=0;
        for(long long  i=f[id];i!=0;i=e[i].next){
            if(di[id]+e[i].val<di[e[i].v]){
            di[e[i].v]=di[id]+e[i].val;
            if(!vis[e[i].v]){
                sum[e[i].v]++;
                if(sum[e[i].v]>n) return false;
                q.push(e[i].v);
                vis[e[i].v]=1;
                
                
            }
            
        }
           
        }
    }
    return true;
}
long long  m;
long long  t;
signed main(){
    cin>>t;
    while(t--){
        cin>>n>>m;
        memset(vis,0,sizeof(vis));
        memset(f,0,sizeof(f));
        memset(sum,0,sizeof(sum));
        memset(di,0x7f,sizeof(di));
        for(long long  i=n;i>=1;i--){
        build(0,i,0,2*m+i);
        }
    
        for (long long  i=1;i<=m;i++){
            long long  u,v,val;
            cin>>v>>u>>val;
            build(u,v-1,val,i);
            build(v-1,u,-val,m+i);
        }
        if(!spfa()) cout<<"true\n";
        else cout<<"false\n";
    }
    return 0;
}

2021/10/6 17:10
加载中...