比赛 20111109 评测结果 EEEEEEEEEW
题目名称 游历校园 最终得分 0
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 09:19:59
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;
const int MAXN=6000;
typedef unsigned short int usint;
int N;
int M;
unsigned short int Mat[MAXN][MAXN];

void init()
{
	scanf("%d\n%d\n",&N,&M);
	for (int i=1;i<=N;i++)
		for (int j=1;j<=N;j++)
			Mat[i][j]=1;
	int a,b;
	for (int i=1;i<=M;i++)
	{
		scanf("%d %d\n",&a,&b);
		Mat[a][b]=0;
		Mat[b][a]=0;
	}		
	return;
}

void prim() 
{ 
    usint lowcost[MAXN];
    int closest[MAXN];

    int i,j,k,mini,ret=0; 

    bool v[MAXN]; 
    for (i=1;i<=N;i++) 
    { 
        lowcost[i]=Mat[1][i]; 
        closest[i]=0; 
        v[i]=false; 
    } 
    v[1] = true; 
    for (i=1;i<=N-1;i++) 
    { 
        k=0; 
        mini=0x7fffffff; 
        for (j=1;j<=N;j++) 
        { 
            if (!v[j] && lowcost[j]<mini) 
            { 
                mini=lowcost[j]; 
                k=j; 
            } 
        } 
        v[k]=true; 
         
        ret+=lowcost[k]; 
         
        for (j=1;j<=N;j++) 
        { 
            if (!v[j] && Mat[k][j]<lowcost[j]) 
            { 
                lowcost[j]=Mat[k][j]; 
                closest[j]=k; 
            } 
        } 
    } 
	cout<<ret<<endl;
}

int main()
{
	freopen("sent.in","r",stdin);
	freopen("sent.out","w",stdout);
	init();
	prim();
	return 0;
}