求助:只WA#9
查看原帖
求助:只WA#9
673006
wjw111楼主2023/1/13 20:16
#include<iostream>
#include<string.h>
#include<queue>
#include<set>
#include<vector>
#define x first
#define y second 
#define pb push_back
#define ms(a,b) memset(a,b,sizeof(a))
#define mp(a,b) std::make_pair(a,b) 
using namespace std;
vector<pair<int,int> > g[2005];
vector<int> d(2005);

void solve()
{
	int n, m;
	cin >> n >> m;
	for(int i=0;i<=n;i++) g[i].clear(),d[i]=100000000;
	while (m--)
	{
		int a, b, c;
		cin >> a >> b >> c;
		if (c >= 0) g[a].push_back(mp(b, c)), g[b].push_back(mp(a, c));
		else g[a].push_back(mp(b, c));
	}
	priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
	set<int> s;
	d[1] = 0;
	int pd = 0;
	pq.push(mp(0, 1));
	vector<int> pa(n+1,0);
	while (pq.size())
	{
		int dis = pq.top().x;
		int v = pq.top().y;
		//cout << v << ": " << dis << "    " << d[v] << endl;
		pq.pop();
		if (s.count(v)) continue;
		d[v] = dis;
		s.insert(v);
		for (pair<int, int> p : g[v])
			if (d[p.x] > d[v] + p.y) 
			{
			    if(s.count(p.x)) 
			    {
			        int ver=v;
			        while(ver!=p.x&&ver) ver=pa[ver];
			        if(ver) pd=1;
			     //   else 
			     //   {
			     //       pa[p.x]=v;
			     //       continue;
			     //   }
			     //   goto aaa;
			    }
			    pa[p.x]=v;
			    pq.push(mp(d[v] + p.y, p.x));
			}
	}
	aaa:;
	if (pd == 0) cout << "NO\n";
	else cout << "YES\n";
}

signed main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	int t;
	std::cin >> t;
	//t = 1;
	while (t--) solve();
}

WA#9:求助dalao 已经调不出来了QwQ

2023/1/13 20:16
加载中...