hdoj 2066 一个人的旅行 【多源多汇最短路】
方法:缩点 + 最短路
分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手。
这个题目就是典型的多源多汇最短路
方法:把全部的源点压缩成一个点,然后汇点压缩成一个点,然后跑最短路
注意:
1:求最短路的时候邻接表存储有重边不影响结果。
2:此题有重边。
3:要特殊处理源点和汇点是同一个点的情况。为0
AC代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1050;
int mp[N][N];
map<int,int> ma;
struct Node
{
int to,val;
};
vector<Node> v[N];
void add_Node(int x,int y,int z)
{
v[x].push_back((Node){y,z});
v[y].push_back((Node){x,z});
} int dis[N];
bool ok[N];
void spfa(int s)
{
queue<int> q;
q.push(s);
memset(dis,inf,sizeof(dis));
dis[s]=0;
while(!q.empty())
{
int tmp=q.front();
q.pop();
for(int i=0;i<v[tmp].size();i++)
{
if(dis[v[tmp][i].to]>dis[tmp]+v[tmp][i].val)
{
dis[v[tmp][i].to]=dis[tmp]+v[tmp][i].val;
q.push(v[tmp][i].to);
}
}
}
} void MP_clear(int n)
{
ma.clear();
for(int i=0;i<=n;i++)
v[i].clear();
}
int main()
{
int t,s,d;
while(~scanf("%d%d%d",&t,&s,&d))
{
memset(mp,inf,sizeof(mp));
int ma_x=0,ma_y=0;
for(int i=0;i<t;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
mp[x][y]=min(z,mp[x][y]);
ma_x=max(ma_x,x);
ma_y=max(ma_y,y);
}
memset(ok,0,sizeof(ok));
int ss=max(ma_x,ma_y)+2,tt=max(ma_x,ma_y)+1;
for(int i=0;i<s;i++)
{
int x;scanf("%d",&x);
ma[x]=ss;
ok[x]=1;
}
int ff=0;
for(int i=0;i<d;i++)
{
int x;
scanf("%d",&x);
ma[x]=tt;
if(ok[x] && ff==0)
ff=1;
}
if(ff==1)
{
printf("0\n");
continue;
}
for(int i=1;i<=ma_x;i++)
{
for(int j=1;j<=ma_y;j++)
{
if(mp[i][j]!=inf)
{
int xx=i,yy=j;
if(ma[i])
xx=ma[i];
if(ma[j])
yy=ma[j];
add_Node(xx,yy,mp[i][j]);
}
}
}
spfa(ss);
printf("%d\n",dis[tt]);
MP_clear(ss);
}
return 0;
}
hdoj 2066 一个人的旅行 【多源多汇最短路】的更多相关文章
- Vijos 1006 晴天小猪历险记之Hill 单源单汇最短路
背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结-- 不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物.所以晴天小猪自告奋勇 ...
- hdoj 2066 一个人的旅行
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- POJ1511 Invitation Cards(多源单汇最短路)
边取反,从汇点跑单源最短路即可. #include<cstdio> #include<cstring> #include<queue> #include<al ...
- 湖南省第十二届大学生计算机程序设计竞赛 F 地铁 多源多汇最短路
1808: 地铁 Description Bobo 居住在大城市 ICPCCamp. ICPCCamp 有 n 个地铁站,用 1,2,…,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i ...
- 2015南阳CCPC F - The Battle of Guandu 多源多汇最短路
The Battle of Guandu Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description In the year of 200, t ...
- hdu 2066 一个人的旅行
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...
- poj1459 Power Network (多源多汇最大流)
Description A power network consists of nodes (power stations, consumers and dispatchers) connected ...
- 2018.07.06 POJ 1459 Power Network(多源多汇最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...
- poj2112 二分+floyd+多源多汇最大流
/*此题不错,大致题意:c头牛去k个机器处喝奶,每个喝奶处最多容纳M头牛,求所有牛中走的最长路的 那头牛,使该最长路最小.思路:最大最小问题,第一灵感:二分答案check之.对于使最长路最短, 用fo ...
随机推荐
- configure.ac
# # Copyright (C) - Tobias Brunner # Copyright (C) - Andreas Steffen # Copyright (C) - Martin Willi ...
- C++将文件内容一次性读入内存
结合字符串流,将文件中的内容一次性读入内存,代码如下: #include <string> using std::ostringstream; using std::ifstream; u ...
- XML(三)
使用 XSLT 显示 XML -------------------------------------------------------------------------------- 通 ...
- C - 链表,推荐
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- ACM比赛(进制转换)
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Description 把十进制整数转换 ...
- Android调整TimePicker和DatePicker大小
最近写了个app,里面要将DatePicker和TimePicker并列显示.但是,Android内部把DatePicker和 TimePicker大小固定了,导致4.5寸手机屏幕一行只能显示出一个, ...
- Orleans is a framework
Introduction Orleans is a framework that provides a straightforward approach to building distributed ...
- 更好地认知Azure
编辑人员注释:本文章由 Windows Azure 网站团队项目经理 Erez Benari 撰写. 我们的网站 http://www.windowsazure.com 包含大量信息,并且也在不断添加 ...
- MDCC为移动开发者服务:一看、一聊、一聚
MDCC为移动开发者服务:一看.一聊.一聚-CSDN.NET MDCC为移动开发者服务:一看.一聊.一聚 发表于2013-11-05 20:54| 2698次阅读| 来源CSDN| 6 ...
- php 上传文件代码
通过 PHP,能够把文件上传到server.里面加入一些图片的推断,假设不加推断文件的类型就能够上传随意格式的文件. 为了站点的安全,肯定不让上传php文件,假设有人进入你的后台,上传了一个php文件 ...