原来样例是一组hack
查看原帖
原来样例是一组hack
1268524
DX3906_ourstar楼主2024/8/1 10:39

我样例不过,但交上去,AC?

上一个题也遇到了这种情况,但经考证,确认是long double的玄学特性所致;但这一次怎么解释?

代码:

#include<iostream>
#include<cstring>
#include<queue>
#define re register
using namespace std;

const int N = 1e5;

int cnt,n,m;
bool flag;
bool vis[N];
int head[N],dis[N],cnte[N];

struct edge{
	int v,w,next;
}e[N];

inline void add(int u,int v,int w){
	cnt ++;
	e[cnt].v = v;
	e[cnt].w = w;
	e[cnt].next = head[u];
	head[u] = cnt;
}

inline void SPFA(){
	queue<int> q;
	vis[0] = true;
	dis[0] = 0;
	cnte[0] ++;
	q.push(0);
	while(! q.empty()){
		int u = q.front();
		vis[u] = false;
		q.pop();
		for(re int i = head[u];i != -1;i = e[i].next){
			int v = e[i].v;
			if(dis[v] < dis[u] + e[i].w){
				dis[v] = dis[u] + e[i].w;
				if(! vis[v]){
					vis[v] = true;
					cnte[v] ++;
					q.push(v);
					if(cnte[v] > n + 1){
						flag = true;
						return ;
					}
				}
			}
		}
	}
	flag = false;
}

inline void cs(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	memset(head,-1,sizeof(head));
	memset(dis,-0x3f,sizeof(dis));
}

int main(){
	cs();
	cin>>n>>m;
	for(re int i = 1;i <= m;i ++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,-z);
	}
	for(re int i = 1;i <= n;i ++){
		add(0,i,0);
	}
	SPFA();
	if(flag){
		cout<<"NO\n";
	}else{
		for(re int i = 1;i <= n;i ++){
			cout<<dis[i]<<" ";
		}
		cout<<"\n";
	}
	return 0;
}
2024/8/1 10:39
加载中...