蒟蒻9,10两个点wa求助
查看原帖
蒟蒻9,10两个点wa求助
237893
donkeys楼主2020/8/29 14:18
#include<iostream>
#include<queue>
#include<cstring>
#include<fstream>
using namespace std;
ifstream ifs("data.in");
const int M = 3003, N = 2003;
int to[M << 1], edge[M << 1], nxt[M << 1], head[N], tot;
int cnt[N], dis[N];
bool v[N];
int n, m;
void init()
{
	memset(to, 0, sizeof(to)),
		memset(edge, 0, sizeof(edge)),
		memset(nxt, 0, sizeof(nxt)),
		memset(head, 0, sizeof(head)),
		memset(cnt, 0, sizeof(cnt)),
		memset(dis, 0x3f, sizeof(dis));
	memset(v, 0, sizeof(v));
	tot = 0;
}
void add(int f, int t, int v)
{
	to[++tot] = t, edge[tot] = v, nxt[tot] = head[f], head[f] = tot;
}
bool spfa()
{
	queue<int>q;
	q.push(1), dis[1] = 0, v[1] = 1;
	while (!q.empty())
	{
		int p = q.front();
		q.pop(), v[p] = 0;
		if (cnt[p] >= n)
		{
			cout << "YES\n";
			return 1;
		}
		for (int i = head[p]; i; i = nxt[i])
		{
			if (dis[to[i]] > dis[p] + edge[i])
			{
				dis[to[i]] = dis[p] + edge[i];
				cnt[to[i]] = cnt[p] + 1;
				if (!v[to[i]])
				{
					q.push(to[i]), v[to[i]] = 1;
				}
			}
		}
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(false);
	int t;
	ifs >> t;
	while (t--)
	{
		ifs >> n >> m;
		for (int i = 0, a, b, c; i < m; i++)
		{
			ifs >> a >> b >> c;
			if (c >= 0)
				add(a, b, c), add(b, a, c);
			else
				add(a, b, c);
		}
		if (!spfa())
			cout << "NO\n";
		init();
	}
	return 0;
}

第一篇题解里的两个hack数据可以过

2020/8/29 14:18
加载中...