qwq萌新不理解,悬关awa
查看原帖
qwq萌新不理解,悬关awa
718025
angiing1222楼主2024/7/29 11:23

我先交了一份错误代码:

#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
vector<pair<int,int>>G[1000005];
int dis[1000005];
bitset<1000005>vis;
bool spfa(int x){
	vis[x]=1;
	for(auto [nx,c]:G[x]){
		if(dis[nx]>dis[x]+c){
			dis[nx]=dis[x]+c;
			if(vis[nx]||spfa(nx)){
				vis[nx]=0;
				return 1;
			}
		}
	}
	vis[x]=0;
	return 0;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--){
		int n,m,w;
		cin>>n>>m>>w;
		for(int i=0;i<=n;++i)G[i].clear();
		for(int i=0;i<m;++i){
			int x,y,z;
			cin>>x>>y>>z;
			G[x].push_back({y,z});
			G[y].push_back({x,z});
		}
		for(int i=0;i<w;++i){
			int x,y,z;
			cin>>x>>y>>z;
			G[x].push_back({y,-z});
		}
		for(int i=1;i<=n;++i){
			memset(dis,0x3f,sizeof dis);
			vis.reset();
			if(spfa(i)){
				cout<<"YES\n";
				goto EZ;
			}
		}
		cout<<"NO\n";
		EZ:
	}
	return 0;
}

这份代码中在对源点跑最短路前没有对dis[i]赋初值0,但是它AC了。在负环模板题中,则WA40。

然后我加上dis[i]=0;后本题TLE74,模板题TLE90。

我不理解:

  1. 为什么加一句代码程序便会TLE?

  2. 为什么本题没给dis[i]赋初值能过、模板题则不行呢?

玄2关,thx。

2024/7/29 11:23
加载中...