2016.7.20的血泪史 (light oj 1040)

4个多小时全部栽在这道曾经做过的题上了。。。。

最后 AC 。。真的是可以哭出来了 。。

原因 :一定要注意定义一个变量时,选择合适的位置,需要重置数据的一定记得放好位置。题目 中 name[110]的位置 是 关键。


题目:http://www.lightoj.com/volume_showproblem.php?problem=1041

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstring>
const int maxx = 100000000;
using namespace std;
int map[105][105],lc,n,sum;
int vis[105];
int dist[105];
bool prim()
{
	lc=0;
	memset(vis,0,sizeof(vis));
	for(int i=0;i<sum;++i)
	dist[i]=map[0][i];
	vis[0]=1;
	
	int u=0;
	for(int i=0;i<sum-1;++i)
	{
		int mins=maxx;
		for(int j=0;j<sum;++j)
		{
			if(!vis[j]&&dist[j]<mins)
			{
				u=j;
				mins=dist[j];
			}
		}
		
		if(vis[u])
		return false;
		
		vis[u]=1;
		lc+=dist[u];
		for(int j=0;j<sum;++j)
		{
			if(dist[j]>map[u][j])
			dist[j]=map[u][j];
		}
	}
	return true;
}
int main()
{
	int t,ca=1;
	cin>>t;
	while(t--)
	{
		cin>>n;
		
		string a,b;
		string name[105];
		int time;
		sum=0;
		
		for(int i=0;i<105;++i)
		{
			for(int j=0;j<105;++j)
			map[i][j]=maxx;
			map[i][i]=0;
		}
		
		cin>>a>>b>>time;
		name[sum++]=a;
		if(b!=a)
	    {
		  name[sum++]=b;
	      map[0][1]=map[1][0]=time;
	    }

	    int bja,bjb;
		for(int i=1;i<n;++i)
		{
			cin>>a>>b>>time;
			int j;
			for(j=0;j<sum;++j)
			{
				if(a==name[j])
				{
				   bja=j;
				   break;
			    }
			} 
			if(j==sum)
			{
			   name[sum++]=a;
			   bja=j;
		    }   
		    
			for(j=0;j<sum;++j)
			{
				if(b==name[j])
				{
				    bjb=j;
				    break;
			    }
			}
			if(j==sum)
			{
			    name[sum++]=b;
			    bjb=j;
		    }
		    
			map[bja][bjb]=map[bjb][bja]=min(map[bja][bjb],time);
		}
		
		//for(int i=0;i<sum;++i)
		//cout<<i<<" "<<name[i]<<endl; 
		cout<<"Case "<<ca++<<": ";
		if(prim())
		cout<<lc<<endl;
		else 
		cout<<"Impossible"<<endl;
	} 
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值