现在的位置: 首页 > 综合 > 正文

hdu 2112

2018年12月31日 ⁄ 综合 ⁄ 共 769字 ⁄ 字号 评论关闭

容器就是好用

 

 

 

 

 

#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
using namespace std;
#define NN 200000000
map<string, int> mp;
char start[50],end[50];
int w[160][160];
int main()
{
    int i,j,k,n,m,s,t,x;
    char a[50],b[50];
    while(scanf("%d",&n),n!=-1)
    {    scanf("%s%s",start,end);
	if(n==0)
	{printf("-1\n");continue;}
	mp.clear();
    
	mp[start]=1;
	mp[end]=2;
	m=2;
	for(i=1;i<=150;i++)
		for(j=1;j<=150;j++)
			w[i][j]=NN;
		for(i=1;i<=150;i++)
			w[i][i]=0;
		for(i=1;i<=n;i++)
		{
			scanf("%s%s%d",&a,&b,&x);
			
			if(!mp[a])
				mp[a]=++m;
			if(!mp[b])
				mp[b]=++m;
			if(w[mp[a]][mp[b]]>x||w[mp[b]][mp[a]]>x)
				w[mp[a]][mp[b]]=w[mp[b]][mp[a]]=x;
		}
		for(k=1;k<=m;k++)
			for(i=1;i<=m;i++)
				for(j=1;j<=m;j++)
				{
					if(w[i][j]>w[i][k]+w[k][j])
						w[i][j]=w[i][k]+w[k][j];
				}
				if(w[mp[start]][mp[end]]<NN)
					printf("%d\n",w[mp[start]][mp[end]]);
				
				else
					printf("-1\n");
				
    }
    return 0;
}

 

抱歉!评论已关闭.