HDU - 2112 HDU Today

https://vjudge.net/problem/HDU-2112

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
const int N=210;
int n,m;
int g[N][N];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	while(cin>>n)
	{
		if(n==-1) break;
		map<string,int> q;
		int cnt=1,c,sx,ex;
		string a,b;
		cin>>a>>b;
		q[a]=1;
		cnt++;
		sx=1;
		if(a!=b)
		{
			q[b]=cnt;
			cnt++;
			ex=2;
		}
		else
			ex=1;
		
		memset(g,0x3f,sizeof g);
		for(int i=0;i<n;i++)
		{
			cin>>a>>b>>c;
			if(q.find(a)==q.end())
				q[a]=cnt++;
			if(q.find(b)==q.end())
				q[b]=cnt++;
			if(g[q[a]][q[b]]>c)
				g[q[a]][q[b]]=c;
			if(g[q[b]][q[a]]>g[q[a]][q[b]])
				g[q[b]][q[a]]=g[q[a]][q[b]];
		}
		
		if(sx==ex)
		{
			cout<<"0\n";
			continue;
		}

		for(int k=1;k<=cnt-1;k++)
		for(int i=1;i<=cnt-1;i++)
		for(int j=1;j<=cnt-1;j++)
		{
			if(g[i][j]>g[i][k]+g[k][j])
				g[i][j]=g[i][k]+g[k][j];
		}
		if(g[1][2]!=0x3f3f3f3f) cout<<g[1][2]<<"\n";
		else cout<<"-1\n";
	}
	return 0;
}
posted @ 2021-07-24 11:34  斯文~  阅读(19)  评论(0)    收藏  举报

你好!