TLE不知原因
查看原帖
TLE不知原因
1108881
LS_QYY楼主2025/8/30 19:15
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int ts;
int n,m,s,t,f[N];
vector<int> vec[N]; 
bool vis[N];
void bfs(int st){
	queue<int> q;
	q.push(st);
	f[st]=0; vis[st]=1;
	while(!q.empty()){
		int tp=q.front(); q.pop();
		//cout<<tp<<':';
		for(int i=0;i<vec[tp].size();i++){
			int nxt=vec[tp][i];
			if(f[nxt]>f[tp]+1&&!vis[nxt]){
				//cout<<nxt<<' ';
				f[nxt]=f[tp]+1;
				vis[nxt]=1;
				q.push(nxt);
			}
		}
		//cout<<endl;
	}
}
int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin>>ts;
	while(ts--){
		cin>>n>>m>>s>>t;
		memset(vis,0,sizeof(vis));
		memset(f,0x3f,sizeof(f));
		for(int i=0;i<n;i++) vec[i].clear();
		for(int i=1;i<=m;i++){
			int u,v; cin>>u>>v;
			vec[u].push_back(v);
			vec[v].push_back(u);
		}
		bfs(t);
		int ans=1e9;
		for(int i=0;i<n;i++){
			//cout<<i<<':'<<f[i]<<endl;
			int now;
			if(i>s) now=f[i]+i;
			else if(i<s) now=f[i]+i+1;
			else now=f[i];
			ans=min(ans,now);
		}
		cout<<ans<<endl;
	}
	return 0;
}

RT,计算得出的时间复杂度是O(T(n+m))

2025/8/30 19:15
加载中...