比赛 20100419 评测结果 RRRRR
题目名称 烟花的寿命 最终得分 0
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-04-19 10:17:38
显示代码纯文本
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int MAXN=100,MAXINT=0x7fffffff;

struct Node
{
	int i,j,w;
};

bool comp(Node a,Node b)
{
	return (a.w>b.w);
}

void add(int);

int w[MAXN][MAXN],n;
bool is[MAXN][MAXN];
bool used[MAXN];
vector<Node> v;

int main()
{
	memset(is,false,sizeof(is));
	memset(used,false,sizeof(used));
	freopen("cityroad.in","r",stdin);
	freopen("cityroad.out","w",stdout);
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			scanf("%d",&w[i][j]);
	make_heap(v.begin(),v.end(),comp);
	add(0);
	int p=0;
	while (p<n-1)
	{
		Node now=v.front();
		pop_heap(v.begin(),v.end(),comp);
		v.pop_back();
		if (used[now.i]&&used[now.j])continue;
		is[now.i][now.j]=is[now.j][now.i]=true;
		used[now.j]=used[now.i]=true;
		p++;
	}
	for(int i=0;i<n;i++)
	{
		printf("%d",is[i][0]);
		for(int j=1;j<n;j++)
			printf(" %d",is[i][j]);
		printf("\n");
	}
}

void add(int x)
{
	for(int i=0;i<n;i++)
		if (i!=x&&w[i][x]>0)
		{
			Node now={i,x,w[i][x]};
			v.push_back(now);
			push_heap(v.begin(),v.end(),comp);
		}
}