0分求调(TLE)必关
查看原帖
0分求调(TLE)必关
1581763
huangruize3楼主2025/6/21 18:07
using namespace std;
const int N=1000001;
int hd[N],ver[N],val[N],nxt[N],idx;
int n,m,dis[N],s,vis[N];
void add(int x,int y,int v){
    ver[++idx]=y;
    val[idx]=v;
    nxt[idx]=hd[x];
    hd[x]=idx;
}
bool Bellman(){
    memset(dis,0,sizeof(dis));
    dis[1]=0;
    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            for(int j=hd[i];i;i=nxt[j]){
                if(dis[i]==0x3f3f3f3f)continue;
                int y=ver[j];
                if(dis[y]>dis[i]+val[j]){
                    dis[y]=dis[i]+val[j];
                    if(k==n)return true;
              }  
            }
        }
    }
    return false;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        memset(ver,0,sizeof(ver));
        memset(nxt,0,sizeof(nxt));
        memset(val,0,sizeof(val));
        memset(hd,0,sizeof(hd));
        idx=0;
        cin>>n>>m;
        int x,y,v;
        while(m--){
            
            cin>>x>>y>>v;
            
            if(v>=0){
                add(x,y,v),add(y,x,v);
            }
            else{
                add(x,y,v);  
            }
                
        }
            if(Bellman())cout<<"YES/n";
            else cout<<"NO/n";
    }
   
    
    
        
    return 0;
}
2025/6/21 18:07
加载中...