Til the Cows Come Home
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 46727   Accepted: 15899

Description

Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible.

Farmer John's field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1..N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not confident of her navigation ability, so she always stays on a trail from its start to its end once she starts it.

Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exists.

Input

* Line 1: Two integers: T and N

* Lines 2..T+1: Each line describes a trail as three space-separated integers. The first two integers are the landmarks between which the trail travels. The third integer is the length of the trail, range 1..100.

Output

* Line 1: A single integer, the minimum distance that Bessie must travel to get from landmark N to landmark 1.

Sample Input

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100

Sample Output

90

Hint

INPUT DETAILS:

There are five landmarks.

OUTPUT DETAILS:

Bessie can get home by following trails 4, 3, 2, and 1.

Dijkstra()

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
typedef __int64 LL;
const int maxn = 2005;
const int INF = 0x3f3f3f3f;
struct Edge{
	int u,v,next;
	LL w;
	bool operator < (const Edge & a)const
	{
		return w > a.w;
	}
}edge[maxn<<1] ;
int tot = 0,head[maxn];
bool vis[maxn];
LL dis[maxn];

void addedge(int u,int v,LL w)
{
	edge[tot] = (Edge){u,v,head[u],w
	};
	head[u] = tot++;
}

void Dijkstra()
{
	priority_queue<Edge>que;
	Edge p;
	memset(dis,INF,sizeof(dis));
	memset(vis,false,sizeof(vis));
	p.v = 1;
	que.push(p);
	dis[1] = 0;
	while (!que.empty())
	{
		p = que.top();
		que.pop();
		int u = p.v;
		if (vis[u])	continue;
		vis[u] = true;
		for (int i = head[u];i != -1;i = edge[i].next)
		{
			int v = edge[i].v;
			if (dis[u] + edge[i].w < dis[v])
			{
				dis[v] = dis[u] + edge[i].w;
				p.u = u,p.v = v,p.w = dis[v];
				que.push(p);
			}
		}
	}
}

int main()
{
	//freopen("input.txt","r",stdin);
	int T,N,u,v;
	LL w;
	memset(head,-1,sizeof(head));
	scanf("%d%d",&T,&N);
	for (int i = 0;i < T;i++)
	{
		scanf("%d%d%I64d",&u,&v,&w);
		addedge(u,v,w);
		addedge(v,u,w);
	}
	Dijkstra();
	printf("%I64d\n",dis[N]);
	return 0;
} 

spfa()

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
const int INF =  0x3f3f3f3f;
const int MAX_N = 1005;
bool flag[MAX_N];
int  edge[MAX_N][MAX_N];

void spfa(int n)
{
	int dis[MAX_N];
	queue<int>que;
	memset(flag,false,sizeof(flag));
	memset(dis,0x3f3f3f3f,sizeof(dis));

	dis[1] = 0;
	que.push(1);
	flag[1] = true;

	while (!que.empty())
	{
		int curval = que.front();
		que.pop();
		flag[curval] = false;

		for (int i = 1;i <= n;i++)
		{
			if (dis[curval] < dis[i] - edge[curval][i])
			{
				dis[i] = dis[curval] + edge[curval][i];

				if (!flag[i])
				{
					que.push(i);
					flag[i] = true;
				}
			}
		}
	}
	printf("%d\n",dis[n]);
}

int main()
{
	int N,T;
	while (~scanf("%d%d",&T,&N))
	{
		int u,v,w;
		for (int i = 1;i <= N;i++)
		{
			for (int j = 1;j <= i;j++)
			{
				if (i == j) edge[i][j] = 0;
				else edge [i][j] = edge[j][i] = INF;
			}
		}
		for (int i = 0;i < T;i++)
		{
			scanf("%d%d%d",&u,&v,&w);
			/*if (w < edge[u][v])
			{
				edge[u][v] = edge[v][u] = w;
			}*/
			edge[u][v] = edge[v][u] = min(w,edge[u][v]);
		}
		spfa(N);
	}
	return 0;
}

  

POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)的更多相关文章

  1. POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)

    题目连接: http://poj.org/problem?id=2387 Description Bessie is out in the field and wants to get back to ...

  2. POJ 2387 Til the Cows Come Home(最短路模板)

    题目链接:http://poj.org/problem?id=2387 题意:有n个城市点,m条边,求n到1的最短路径.n<=1000; m<=2000 就是一个标准的最短路模板. #in ...

  3. POJ 2387 Til the Cows Come Home --最短路模板题

    Dijkstra模板题,也可以用Floyd算法. 关于Dijkstra算法有两种写法,只有一点细节不同,思想是一样的. 写法1: #include <iostream> #include ...

  4. POJ 2387 Til the Cows Come Home (图论,最短路径)

    POJ 2387 Til the Cows Come Home (图论,最短路径) Description Bessie is out in the field and wants to get ba ...

  5. POJ.2387 Til the Cows Come Home (SPFA)

    POJ.2387 Til the Cows Come Home (SPFA) 题意分析 首先给出T和N,T代表边的数量,N代表图中点的数量 图中边是双向边,并不清楚是否有重边,我按有重边写的. 直接跑 ...

  6. Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化)

    Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回 ...

  7. POJ 2387 Til the Cows Come Home

    题目链接:http://poj.org/problem?id=2387 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K ...

  8. 怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)

    Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33015   Accepted ...

  9. POJ 2387 Til the Cows Come Home (最短路 dijkstra)

    Til the Cows Come Home 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description Bessi ...

随机推荐

  1. dagger2记录篇

    作为一个码农,什么都不用多讲,贴代码 build project build module Application public class App extends Application { pri ...

  2. UI-初识君面之理论篇

    一个好的app不光要用好的功能,还要有好的界面,这样内外兼修才算得上是一个好的App.其实跟人一样,不能只刷帅,要有内涵(看清楚哦,内涵不是指闷骚).不知不觉在园子里已经晃了八年,来深也八年了,.NE ...

  3. RunLoop 总结:RunLoop的应用场景(二)

    上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...

  4. (二)Spark-Linux环境准备-Java&Python版Spark

    Spark-Linux环境准备 视频教程: 1.优酷 2.YouTube 硬软件环境 1.虚拟机:VMware Workstation 12 2.虚拟机操作系统:RedHat5u4,单核,1G内存,2 ...

  5. 织梦DedeCMS模板防盗的四种方法

    织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...

  6. Apache启动错误解决方法

    xampp启动时显示的错误为: 10:40:18 [Apache] Error: Apache shutdown unexpectedly.10:40:18 [Apache] This may be ...

  7. python快速生成注释文档的方法

    python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...

  8. 如何在github上下载单个文件夹?

    作者:ce ge链接:https://www.zhihu.com/question/25369412/answer/96174755来源:知乎著作权归作者所有,转载请联系作者获得授权. Git1.7. ...

  9. O(1)效率的表面模糊算法优化。

    很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前写博客的热情吧. 国内我认为,破解表面模糊的原理的最 ...

  10. Eclipse注释模板设置详解

    设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素 ...