比赛 2008haoi模拟训练2 评测结果 AAAAA
题目名称 公路建设 最终得分 50
用户昵称 BYVoid 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-04-23 18:12:12
显示代码纯文本
#include <iostream>
#include <iomanip>
#include <fstream>
#define MAXM 2001
#define MAXN 501

using namespace std;

typedef struct
{
	long a,b,v;
}edge;

ifstream fi("road.in");
ofstream fo("road.out");

long adjl[MAXN][MAXN],dis[MAXN][MAXN],INF,N,M,Ncnt;
bool vis[MAXN];
edge MAXE;


long getmaxe(long i,long S)
{
	vis[i]=true;
	long j,k;
	for (k=1;k<=adjl[i][0];k++)
	{
		j=adjl[i][k];
		if (j==INF) continue;
		if (dis[i][j]==INF || vis[j]) continue;
		if (j==S)
		{
			MAXE.a=i;MAXE.b=j;MAXE.v=dis[i][j];
			return dis[i][j];
		}
		long b=getmaxe(j,S);
		if (b>=0)
		{
			if (dis[i][j]>MAXE.v)
			{
				MAXE.a=i;MAXE.b=j;MAXE.v=dis[i][j];
			}
			return b+dis[i][j];
		}
	}
	return -1;
}

long getvalue(int i)
{
	vis[i]=true;
	Ncnt++;
	int j,k;
	long P=0;
	for (k=1;k<=adjl[i][0];k++)
	{
		j=adjl[i][k];
		if (j==INF) continue;
		if (dis[i][j]==INF || vis[j]) continue;
		P+=dis[i][j];
		P+=getvalue(j);
	}
	return P;
}

void delmaxe()
{
	long i,j;
	dis[MAXE.a][MAXE.b]=dis[MAXE.b][MAXE.a]=INF;
	for (i=1;i<=adjl[MAXE.a][0];i++)
	{
		if (adjl[MAXE.a][i]==MAXE.b)
		{
			adjl[MAXE.a][i]=INF;
			break;
		}
	}
	for (i=1;i<=adjl[MAXE.b][0];i++)
	{
		if (adjl[MAXE.b][i]==MAXE.a)
		{
			adjl[MAXE.b][i]=INF;
			break;
		}
	}
}

void request()
{
	memset(dis,0xf,sizeof(dis));
	INF=dis[0][0];
	long i,a,b,v;
	fi >> N >> M;
	for (i=1;i<=M;i++)
	{
		fi >> a >> b >> v;
		memset(vis,0,sizeof(vis));
		long B=getmaxe(a,b);
		if (B>=0) //A,B连通,删除最大边
		{
			if (v<MAXE.v)
			{
				delmaxe();
				dis[a][b]=dis[b][a]=v;
				adjl[a][ ++adjl[a][0] ]=b;
				adjl[b][ ++adjl[b][0] ]=a;
			}
		}
		else
		{
			dis[a][b]=dis[b][a]=v;
			adjl[a][ ++adjl[a][0] ]=b;
			adjl[b][ ++adjl[b][0] ]=a;
		}

		Ncnt=0;
		memset(vis,0,sizeof(vis));
		B=getvalue(a);
		if (Ncnt<N)
			fo << 0 << endl;
		else
			fo << fixed << setprecision(1) << B/2.0 << endl;
	}

}

void print()
{
	fi.close();
	fo.close();
}

int main()
{
	request();
	print();
	return 0;
}