求救~~spaf前10个点全部TLE
查看原帖
求救~~spaf前10个点全部TLE
591952
xiaozhao_楼主2023/8/21 19:59

以下是我的代码(我不相信我的快读有问题):

#include<bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
using namespace std;
inline void read(int &x){
    x=0;
    bool f=0;
    char c;
    while(((c=getchar())<'0'||c>'9')&&c!='-');
    if(c=='-') f=1;
    else x=c^48;
    while((c=getchar())>47&&c<58) x=(x<<3)+(x<<1)+(c^48);
    if(f) x=~x+1;
}
const int N=3e4+10;
struct node{int v,w,next;}e[N];
int n,m,cnt,h[N],d[N],ans[N];
bool vis[N];
inline void add(int u,int v,int w){
	e[++cnt]={v,w,h[u]};
	h[u]=cnt;
}
queue<int> q;
inline bool spaf(){
	memset(d,0x3f,sizeof d);
	memset(vis,0,sizeof vis);
	memset(ans,0,sizeof ans);
	while(!q.empty()) q.pop();
	d[1]=0,vis[1]=1,q.push(1);
	while(!q.empty()){
		int t=q.front();
		q.pop();
		vis[t]=0;
		for(int j=h[t];j;j=e[j].next){
			int v=e[j].v;
			if(d[v]>d[t]+e[j].w){
				d[v]=d[t]+e[j].w;
				ans[v]=ans[t]+1;
				if(ans[v]>=n) return 1;
				if(!vis[v]) vis[v]=1,q.push(v);
			}
		}
	}
	return 0;
}
int main(){
	int t; 
	read(t);
	while(t--){
		memset(h,0,sizeof 0);
		cnt=0;
		read(n),read(m);
		for(int i=1,a,b,c;i<=m;i++){
			read(a),read(b),read(c);
			add(a,b,c);
			if(c>=0) add(b,a,c);
		}
		if(spaf()) puts("YES");
		else puts("NO");
	}
	return 0;
}
2023/8/21 19:59
加载中...