比赛 不平凡的世界 评测结果 WWAWWWWWWW
题目名称 不平凡的引线 最终得分 10
用户昵称 lxtgogogo 运行时间 0.405 s
代码语言 C++ 内存使用 1.83 MiB
提交时间 2015-11-05 11:02:12
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<queue>
#include<ctime>
#include<cstdlib>
using namespace std;

const int r=100000;
int m=0;
int n[r+10]={};//每个点的度
bool fd[r+10]={};//这个点是不是被烧到了
bool fb[r+10]={};//这个边是不是被烧过了

struct hehe{
	int x,y,len;
};
hehe e[r+10];//bian

void init(){
	scanf("%d",&m);
	int u=0,v=0,ll=0;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&u,&v,&ll);
		n[u]++;n[v]++;
		e[i].x=u;e[i].y=v;e[i].len=ll;
	}
}
void work1(){
	double ans=1;
	int num=0;
	for(int i=1;i<=m;i++)
	{
		int u=e[i].x,v=e[i].y;
		if(n[u]==1 || n[v]==1)
		{
			fd[u]=true;fd[v]=true;
			fb[i]=true;
			num++;
		}
	}
	while(num<m)
	{
		double t=0;
		for(int i=1;i<=m;i++)
			if(!fb[i])
			{
				int u=e[i].x,v=e[i].y;
				if(fd[u] || fd[v])
				{
					if(fd[u] && fd[v] && t==0)	t=0.5;
					else	t=1;
					fb[i]=true;
					num++;
				}
			}
		ans+=t;
		for(int i=1;i<=m;i++)
			if(fb[i] && (!fd[e[i].x] || !fd[e[i].y]))	{fd[e[i].x]=true;fd[e[i].y]=true;}
	}
	cout<<ans<<endl;
}
void work2(){
	double ans=0;
	for(int i=1;i<=m;i++)
		ans+=e[i].len;
	ans/=2;
	printf("%.1lf\n",ans);
}
int main(){
	freopen("firelead.in","r",stdin);
	freopen("firelead.out","w",stdout);
	
	init();
	if(m<=1000)	work1();
	else	work2();
	
	fclose(stdin);fclose(stdout);
	return 0;
}