请求加强数据
查看原帖
请求加强数据
158652
IQ勇士楼主2022/12/17 16:45

RT,这题我在建超级源点的时候将

add(n + 1, i, 0);

打成了

add(n + 1, n, 0);

但是提交之后居然过了

以下是AC代码

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct edge{
	int from;
	int to;
	int nxt;
	int q;
}e[20001];
int n, m, u, v, a, b, k, flag, head[5010], cnt, dis[5010], ls[5010];
void add(int uu, int vv, int ww)
{
	e[++cnt].from = uu;
	e[cnt].to = vv;
	e[cnt].nxt = head[uu];
	e[cnt].q = ww;
}
int main()
{
	cin >> n >> m;
	for(int i = 1; i <= m; i++)
	{
		cin >> a >> b >> k;
		add(b, a, k);
	}
	dis[n + 1] = 0;
	for(int i = 1; i <= n; i++)
	{
		add(n + 1, n, 0);
		dis[i] = 999999999;
	}
	for(int xxx = 1; xxx <= n + 1; xxx++)
	{
		for(int i = 1; i <= cnt; i++)
			if(dis[e[i].from] + e[i].q < dis[e[i].to])
				ls[e[i].to] = dis[e[i].from] + e[i].q;
		for(int i = 1; i <= n + 1; i++)
		{
			if(xxx == n + 1 && dis[i] != ls[i])
			{
				flag = 1;
				break;
			}
			dis[i] = ls[i];
		}
	}
	if(flag)
		cout << "NO";
	else
	{
		for(int i = 1; i <= n; i++)
			cout << dis[i] << ' ';
	}
	return 0;
}
2022/12/17 16:45
加载中...