POJ 3268 Silver Cow Party ( Dijkstra )
题目大意:
有N个农场每个农场要有一头牛去参加一个聚会,连接每个农场有m条路, 聚会地点是X,并且路是单向的.要求的是所有牛赶到聚会地点并且回到自己原先的农场所需要的最短时间。
题目分析:
其实就是以X为终点,求出X到其他每个点的距离, 再将图反存一下,在做一次最短路, 两次距离相加求出最长的时间。
这里是用Dijkstra写的,我们第一次用邻接矩阵写,第二次用邻接表,并且有优先队列优化
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 0xfffffff
#define maxn 1005
int G[][maxn][maxn];
int dist[][maxn];
bool vis[][maxn];
int n, m, X;
void Dijkstra(int Star,int End,int k)
{
dist[k][Star] = ; for(int i=; i<=n; i++)
{
int Min = INF, index;
for(int j=; j<=n; j++)
{
if(dist[k][j] < Min && !vis[k][j])
Min = dist[k][j], index = j;
} vis[k][index] = true; for(int j=; j<=n; j++)
{
if(!vis[k][j])
dist[k][j] = min(dist[k][j], dist[k][index] + G[k][index][j]);
}
}
}
void Init()
{
memset(vis,false,sizeof(vis));
for(int i=; i<=n; i++)
{
dist[][i] = dist[][i] = INF;
for(int j=; j<=n; j++)
G[][i][j] = G[][j][i] = G[][i][j] = G[][j][i] = INF;
}
} int Slove()
{
int Max = ;
Dijkstra(X,n,);
Dijkstra(X,n,);
for(int i=; i<=n; i++)
{
Max = max(dist[][i]+ dist[][i], Max);
}
return Max;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&X) != EOF)
{
Init();
for(int i=; i<m; i++)
{
int a, b, c;
scanf("%d%d%d",&a,&b,&c);
G[][a][b] = min(G[][a][b],c);
G[][b][a] = min(G[][b][a],c);
}
int ans = Slove(); cout << ans << endl;
}
return ;
}
优先队列版本
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 0xfffffff
#define maxn 1006
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
struct Edge
{
int e;
int w;
friend bool operator < (Edge n1, Edge n2)
{
return n1.w > n2.w;
}
};
vector<Edge>G[2][maxn]; int dist[2][maxn];
bool vis[2][maxn];
int n, m, X;
void Dijkstra(int Star,int End,int k)
{
Edge P, Pn;
P.e = Star;
P.w = 0;
dist[k][P.e] = 0;
priority_queue<Edge> Q;
Q.push(P); while( !Q.empty() )
{
P = Q.top();
Q.pop(); if( vis[k][P.e] )
continue; vis[k][P.e] = true; int len = G[k][P.e].size(); for(int i=0; i<len; i++)
{
Pn.e = G[k][P.e][i].e;
Pn.w = G[k][P.e][i].w + P.w;
if( !vis[k][Pn.e] )
{
dist[k][Pn.e] = min(dist[k][Pn.e],Pn.w);
Q.push(Pn);
}
}
}
}
void Init()
{
memset(vis,false,sizeof(vis));
for(int i=0; i<=n; i++)
{
G[0][i].clear();
G[1][i].clear();
dist[0][i] = dist[1][i] = INF;
}
} int Slove()
{
int Max = 0;
Dijkstra(X,n,0);
Dijkstra(X,n,1);
for(int i=1; i<=n; i++)
{
Max = max(dist[0][i]+ dist[1][i], Max);
}
return Max;
}
int main()
{
Edge P;
while(scanf("%d%d%d",&n,&m,&X) != EOF)
{
Init();
for(int i=0; i<m; i++)
{
int a, b, c;
scanf("%d%d%d",&a,&b,&c);
P.e = b, P.w = c;
G[0][a].push_back(P);
P.e = a;
G[1][b].push_back(P);
}
int ans = Slove(); cout << ans << endl;
}
return 0;
}
POJ 3268 Silver Cow Party ( Dijkstra )的更多相关文章
- POJ 3268 Silver Cow Party (Dijkstra)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions:28457 Accepted: 12928 ...
- POJ 3268 Silver Cow Party (最短路径)
POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...
- POJ 3268 Silver Cow Party(Dijkstra算法求解来回最短路问题)
题目链接: https://vjudge.net/problem/POJ-3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently n ...
- POJ 3268 Silver Cow Party (双向dijkstra)
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ 3268 Silver Cow Party (最短路dijkstra)
Silver Cow Party 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/D Description One cow fr ...
- poj 3268 Silver Cow Party(最短路)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17017 Accepted: 7767 ...
- POJ 3268 Silver Cow Party(最短路&Dijkstra)题解
题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径 思路:用Floyd超时的,这里用的Dijkstra. Dijkstra感觉和Prim和Kruskal的思路很像啊.我们把 ...
- poj 3268 Silver Cow Party(最短路,正反两次,这个模版好)
题目 Dijkstra,正反两次最短路,求两次和最大的. #define _CRT_SECURE_NO_WARNINGS //这是找出最短路加最短路中最长的来回程 //也就是正反两次最短路相加找最大的 ...
- POJ 3268 Silver Cow Party(dij+邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...
随机推荐
- 2015移动安全挑战赛(阿里&看雪主办)第一题分析
今天在网上看到了阿里移动安全比赛的第一次,并且说难度不大,便拿来看了看. 主体就是找出一个密码输进去,然后看正误. 这个题是纯Java层的一个题,也没用进行什么保护.可以直接反编译. 登陆Button ...
- [转] Java中的容器
在书写程序的时候,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中. 由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都 ...
- 4道过滤菜鸟的iOS面试题
网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区 ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- grunt插件[font-spider] : 转码,压缩字体 @font-face
字蛛插件:压缩与转码静态页面中的 WebFont 需要注意的是,目前只支持 grunt@0.4.1 package.json { "name": "fontS" ...
- CI 中css样式或者js样式加载不进来的情况
首先,目录应该是放在根目录下面的,和 application 目录同级 然后再application\config\config.php ,将默认路径配置成为自己的本访问路径 $config['bas ...
- WebService CXF调试常见报错及解决方案
1.CXF java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决方案:从apache-cxf/lib下寻找Wood ...
- SAS学习笔记
一. 在SAS中进行随机抽样: 1. 在实际数据处理中常常需要进行样本抽样,在实践中主要有两种情况: (1)简单无重复抽样(2)分层抽样 a.等比例分层抽样 b. 不等比例 ...
- VS2012 ActiveX控件_D接口添加方法事项
自己写的是Clock控件,所以控件的接口是_DClock 使用向导添加方法后,会在紫色区域自动生成红色代码:(添加Hello方法) dispinterface _DClock { properties ...