WA#9 Line2求调
查看原帖
WA#9 Line2求调
439165
小涛涛??楼主2024/8/6 15:36

调了半天也调不好,只能求大佬帮助了

文件读写也莫名用不了 QAQ

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct edge {
	ll u,v,w,next;
	bool operator <(const edge&a) const {
		return w>a.w;
	}
} e[200010];
deque<ll> Q;
bool in[100010];
ll head[100010],cnt,dis[100010],vis[100010];
void add_edge(ll u,ll v,ll w) {
	e[++cnt].u=u;
	e[cnt].v=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
}
void spfa(ll n,ll end) {
	while(!Q.empty())Q.pop_back();
	ll ed,v;
	Q.push_back(n);
	while(!Q.empty()) {
		ed=head[Q.front()];
		in[Q.front()]=0;
		Q.pop_front();
		while(ed!=0) {
			v=e[ed].v;
			if(dis[v]>dis[e[ed].u]+e[ed].w) {
				dis[v]=dis[e[ed].u]+e[ed].w;
				if(!in[v]) {
					if(++vis[v]>=end) {
						cout<<"YES\n";
						return ;
					}
					in[v]=1;
					if(!Q.empty()&&dis[v]<dis[Q.front()]) {
						Q.push_front(v);
					} else {
						Q.push_back(v);
					}
				}
			}
			ed=e[ed].next;
		}
	}
	
	cout<<"NO\n";
	return ;
}
int main() {
//	freopen("P3385_9.in","r",stdin);
	ll n,m,T;
	ll u,v,w;
	cin>>T;
	for(ll i=1; i<=T; i++) {
		memset(dis,0x7f,sizeof(dis));
		memset(head,0,sizeof(head));
		memset(vis,0,sizeof(vis));
		memset(e,0,sizeof(e));
		memset(in,0,sizeof(in));
		cin>>n>>m;
		cnt=0;
		for(ll j=1; j<=m; j++) {
			cin>>u>>v>>w;
			if(w>=0)
				add_edge(v,u,w);
			add_edge(u,v,w);
		}
		dis[1]=0;
		spfa(1,n);

	}

	return 0;
}

2024/8/6 15:36
加载中...