Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

怎么就WA?

Posted by MetalHeart at 2008-02-22 14:52:55 on Problem 2421

#include <iostream>
#include <vector>

using namespace std;

const int INF = 0X7FFFFFFF;

vector<vector<int> > ew;
int n,m;

void INI(void)
{
	ew.assign(n,vector<int>(n,INF));
	for(int i=0;i!=n;++i)
		for(int j=0;j!=n;++j)
			scanf("%d",&(ew[i][j]));
	for(int i=0;i!=n;++i)
		for(int j=i;j!=n;++j) 
			ew[i][j]=ew[j][i] = min(ew[i][j],ew[j][i]);
	scanf("%d",&m);
	for(int i=0;i!=m;++i) {
		int u,v;
		scanf("%d%d",&u,&v);
		--u,--v;
		ew[u][v] = 0;
	}
}

int Prim(const int root)
{
	vector<bool> InMst(n,false);
	vector<int> d(n,INF);

	d[root] = 0;
	InMst[root] = true;

	for(int i=0;i!=n;++i) {
		d[i] = ew[root][i];
	}

	int ans = 0;
	while(true) {
		int Min = INF;
		int MinPoi = -1;
		for(int i=0;i!=n;++i) {
			if(!InMst[i] && d[i]<Min) {
				Min = d[i];
				MinPoi = i;
			}
		}

		if(MinPoi == -1) {
			break;
		}else {
			ans += Min;
			InMst[MinPoi] = true;
			for(int i=0;i!=n;++i) {
				if(!InMst[i] && ew[MinPoi][i]<d[i])
					d[i] = ew[MinPoi][i];
			}
		}
	}
	return ans;
}


int main(void)
{
	while(1==scanf("%d",&n))
		INI(),printf("%d\n",Prim(0));
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator