测试点五TLE:(
查看原帖
测试点五TLE:(
1010775
Floating_Dreamer楼主2024/4/11 17:11

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int n,indexx,ans=N,vis[N],dis[N],w[N],u[N],v[N],ans1=0;
struct node{
	int from,to;
}mp[N];
void addedge(int x,int y){
	mp[++indexx].from=x;
	mp[indexx].to=y;
}
void bfs(int s){
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	queue<int> q;
	vis[s]=1;
	q.push(s);
	int step=0;
	ans1=0; 
	while(!q.empty()){
		int x=q.front();
		q.pop();
		step=dis[x]+1;
		for(int i=1;i<=n;i++){
			if(mp[i].to==x&&!vis[mp[i].from]){
				dis[mp[i].from]=step;
				q.push(mp[i].from);
				vis[mp[i].from]=1;
			//	ans1+=step*w[mp[i].from];
			}
			if(mp[i].from==x&&!vis[mp[i].to]){
				dis[mp[i].to]=step;
				q.push(mp[i].to);
				vis[mp[i].to]=1;
			//	ans1+=step*w[mp[i].to];
			}
		}
	}
	for(int i=1;i<=n;i++){
		ans1+=dis[i]*w[i];
//		cout<<dis[i]<<" ";
	}
//	cout<<endl;
	ans=min(ans,ans1);
//	cout<<s<<" "<<ans1<<endl;
}
int main(){
	cin>>n;
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	for(int i=1;i<=n;i++){
		cin>>w[i]>>u[i]>>v[i];
		if(u[i]!=0)	addedge(i,u[i]);
		if(v[i]!=0)	addedge(i,v[i]);
	}
	for(int i=1;i<=n;i++){
		bfs(i);
	}
	cout<<ans;
	return 0;
}
2024/4/11 17:11
加载中...