建议加强数据
查看原帖
建议加强数据
820951
Ningmo楼主2023/5/21 16:39
#include <bits/stdc++.h>
using namespace std;
const int N=102,M=2002;
int w,m,n,s,t,v,tot,flag;
int head[N],to[M],nextt[M],val[M];
int dis[N],vis[N],num[N];
queue<int> q;
 
void add(int x,int y,int z){
	to[++tot]=y;
	nextt[tot]=head[x];
	val[tot]=z;
	head[x]=tot;
}

void spfa(){
	memset(dis,0x7f,sizeof(dis));
	q.push(0);
	dis[0]=0;
	vis[0]=1;
	while (!q.empty()){
		int k=q.front();
		q.pop();
		vis[k]=0;
		num[k]++;
		if (num[k]==n){
			flag=1;
			return;
		}
		for (int i=head[k];i;i=nextt[i]){
			int y=to[i];
			if (dis[y]>dis[k]+val[i]){
				dis[y]=dis[k]+val[i];
				if (!vis[y]){
					q.push(y);
					vis[y]=1;
				}
			}
		}
	}
}

int main(){
	cin>>w;
	while(w--){
		flag=0;
		tot=0;
		cin>>n>>m;
		memset(to,0,sizeof(to));
		memset(val,0,sizeof(val));
		memset(nextt,0,sizeof(nextt));
		memset(vis,0,sizeof(vis));
        memset(head,0,sizeof(head));
        memset(num,0,sizeof(num));
		for (int i=1;i<=m;i++){
			cin>>s>>t>>v;
			add(s-1,t,v);
			add(t,s-1,-v);
		}
		spfa();
		if (flag) cout<<"false"<<endl;
		else cout<<"true"<<endl;
	}
	return 0;
}

这是我同学的代码,会对这组数据输出true(因为他默认0号点一定是起点,但数据中可能根本没有关于第一个月的记录)

1
35 3
3 5 5
6 8 5
3 8 15

附他的AC记录: https://www.luogu.com.cn/record/110870523

2023/5/21 16:39
加载中...