球调
查看原帖
球调
827018
zhouzihang1楼主2023/10/19 20:30

40pts

WA# 345

打的bfs

#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <cmath>
#include <bits/stdc++.h>
#define mp(a,b) make_pair(a,b)
#define PII pair<int,int>
#define unll unsigned ll
#define ll long long
using namespace std;
const int N=105,INF=INT_MAX;
int n,w[N],ans=INF;
vector<int> vc[N];
bool vis[N];
int dis[N],sum;
queue<int> q;
void Clear()
{
	sum=0;
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	while(!q.empty()) q.pop();
}
int bfs(int step)
{
	vis[step]=1;
	q.push(step);
	int u;
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		for(auto v:vc[u])
		{
			if(vis[v]) continue;
			vis[v]=1;
			dis[v]=dis[u]+1;
			sum+=dis[v]*w[v];
			q.push(v);
		}
	}
	ans=min(ans,sum);
}
int main()
{
	scanf("%d",&n);
	int u,v;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&w[i],&u,&v);
		vc[i].push_back(u);
		vc[u].push_back(i);
		vc[i].push_back(v);
		vc[v].push_back(i);
	}
	for(int i=1;i<=n;i++)
	{
		Clear();
		bfs(i);
	}
	printf("%d",ans);
	return 0;
}





2023/10/19 20:30
加载中...