求助,多组数据错误,单组数据正确
查看原帖
求助,多组数据错误,单组数据正确
566354
XILOU_HEZHAO楼主2022/8/12 11:46
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <cstdint>
#include <cstdio>

#define input(a) scanf("%d",&a)
#define print(a) printf("%d",a)
#define pcr putchar('\n')
#define pck putchar(' ')

using namespace std;

const int MAXN = 1e6+7;

void init();

int T;
int n,m;

void print_edge();

struct node{
	int to[MAXN],nxt[MAXN],w[MAXN];
	
	int head[MAXN],cnt;
	
	void add(int x,int y,int z){
		to[++cnt] = y;
		nxt[cnt] = head[x];
		w[cnt] = z;
		head[x] = cnt;
	}
    void operator()(int i){
        to[i] = nxt[i] = w[i] = head[i] = 0;
    }
}e;

queue<int > q;

int dis[MAXN],cnt[MAXN];

bool vis[MAXN];

bool spfa(int s){
    cnt[s] = 0;
	dis[s] = 0;
	vis[s] = true;
	q.push(s);
	while(!q.empty()){
		int x = q.front();
        vis[x] = 0;
		q.pop();
		for(int i = e.head[x];i;i = e.nxt[i]){
            int v = e.to[i];
			if(dis[v] > dis[x] + e.w[i]){
				dis[v] = dis[x] + e.w[i];
				if(++cnt[v] >= n) return true;
				if(!vis[v]){
					q.push(v);
					vis[v] = true;
				}
			}
		}
	}
	return false;
}

int main(){
    freopen("P3385_1.in","r",stdin);
    freopen("a.out","w",stdout);
	input(T);
	do{
	init();
    print_edge();
	if(spfa(1)) puts("YES");
	else puts("NO");
	}while(--T);
	fclose(stdout);
	return 0;
}

void init(){
    e.cnt = 0;
    for(int i = 0; i <= n ; ++ i) {
        vis[i] = false;
        dis[i] = 0x7f7f7f;
        cnt[i] = 0;
        e(i);
    }
    while(!q.empty())q.pop();
    input(n),input(m);
	for(int i = 0; i < m ; ++ i){
		int x,y,z;
		input(x),input(y),input(z);
		if(z >= 0) e.add(x,y,z),e.add(y,x,z);
		else e.add(x,y,z);
	}
}

void print_edge(){
    for(int i = 1; i <= n; ++ i){
        for(int j = e.head[i];j;j = e.nxt[j]){
            printf("%d %d %d\n",i,e.to[j],e.w[j]);
        }
    }
}

2022/8/12 11:46
加载中...