Hdu oj 2112 HDU Today

题目:点击打开链接

关于C++中map的使用:点击打开链接

代码:

#include<stdio.h>
#include<string.h>
#include<string>
#include<map>//将字符串转化成数字
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
char str1[30],str2[30];
int cost[150][150],d[150];
bool used[150];
void distr(int x,int y)
{
	for(int i=1;i<150;i++)//  !!
	{
		d[i]=INF;
		used[i]=false;
	}
	d[x]=0;
	while(true)
	{
		int v=-1;
		for(int u=1;u<=y;u++)
		if(!used[u]&&(v==-1||d[u]<d[v]))
		v=u;
		if(v==-1)
		break;
		used[v]=true;
		for(int u=1;u<=y;u++)
		d[u]=min(d[u],d[v]+cost[v][u]);
	}
	if(d[2]>=INF)
	printf("-1\n");
	else
	printf("%d\n",d[2]);
}
int main()
{
	int t;
	map<string,int>mp;
	while(~scanf("%d",&t))
	{
		if(t==-1)
		break;
		int i,j;
		int c;
		int flag=0;
		mp.clear();
		for(i=1;i<150;i++)
		    for(j=1;j<150;j++)
		    cost[i][j]=INF;
		scanf("%s%s",str1,str2);
		if(strcmp(str1,str2))//判断起点和终点是否相等
		flag=1;
		mp[str1]=1;
		mp[str2]=2;
		int count=3;
		for(i=0;i<t;i++)
		{
			scanf("%s%s%d",str1,str2,&c);
			if(!mp[str1])
			mp[str1]=count++;
			if(!mp[str2])
			mp[str2]=count++;
			cost[mp[str1]][mp[str2]]=cost[mp[str2]][mp[str1]]=c;
		}
		if(!flag)
		printf("0\n");
		else
		distr(1,count);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-02 16:03:42

Hdu oj 2112 HDU Today的相关文章

[C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

前言 做过杭电.浙大或是北大等ACM题库的人一定对“刷题”不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到“Online Exercise”下的“Problem Archive”,然后从众多题目中选择一个进行读题.构思.编程.然后提交.最后查看题解状态,如果AC了表示这一题被攻克了,否则就要重做了~一般情况下,“刷题”要求精神高度集中且经验丰富,否则很难成功AC,有时候甚至做一题要浪费半天的时间!(有时网速卡了,比抢火车票还要急!) 楼主在

HDU 2112 HDU Today(Dijkstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14527    Accepted Submission(s): 3412 Problem Description 经过锦囊相助,海东集团最终度过了危机.从此.HD

hdu 2112 HDU Today (最短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的时候,这里注意不能直接输出0,必须用标记,因为数据可能还没有处理完!!!此处贡献n次wa. (2)这里是某大神教我的用map进行转换,将字符串转换成数字,值得参考.map<string,int>M,V:不过这里同样是wa了好多次.要注意的是将最先输入的开始和结束的点也要放到这个map里面. (3)

HDU OJ 2159 FATE

#include <stdio.h> #include <string.h> int f[150][150] ; int w[150]; //»ñµÃ¾­Ñé int c[150]; //»¨·ÑµÄÈÌÄÍ¶È int main() { int n, m, kk, s; int i, j, k; int flag, cc; while(scanf("%d %d %d %d", &n, &m, &kk, &s )!=EOF) //

HDU 2112 HDU Today (Dijkstra算法)

HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13952    Accepted Submission(s): 3264 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候

hdu 2112 HDU Today

http://acm.hdu.edu.cn/showproblem.php?pid=2112 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <string> 5 #include <map> 6 #include <algorithm> 7 #define maxn 6000 8 using namespace std; 9 cons

HDU 2112 HDU Today,最短路径算法,Dijkstra

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13396    Accepted Submission(s): 3144 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HD

hdu 2112 HDU Today 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目意思:又是求最短路的,不过结合埋字符串来考查. 受之前1004 Let the Balloon Rise 学到用map 的解法做之后,有点蠢蠢欲动,当时见到要用字典树做有点吓坏了(之前看过下,非一般难理解,所以暂时放下了).于是,死就死吧,硬住头皮用map做,反反复复修改终于过了. 首先是memory limit exceeded,因为无读清题目意思,直接开10000 * 10000的数组

hdu oj 1285 确定比赛名次

hdu oj 1285 确定比赛名次 题目: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17378    Accepted Submission(s): 6939 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参