比赛 |
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;
}