HDU 5521 Meeting
2015 ACM / ICPC 沈阳站现场赛 M题
最短路
设置N+M个节点,前N个节点是Block,后M个节点是Set,每一组Set中的点向该Set连边,从1和n开始分别求最短路。注意爆int。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std; const long long INF=1e16;
const int maxn=+;
const int maxm=+;
long long dis1[maxn],dis2[maxn],val[maxn];
bool flag1[maxn],flag2[maxn];
vector<int>G[maxn];
vector<int>Ans;
struct Edge
{
int from;
int to;
}e[maxm];
int T,n,m,tot; void init()
{
memset(val,,sizeof val);
memset(flag1,,sizeof flag1);
for(int i=;i<maxn;i++) dis1[i]=INF;
memset(flag2,,sizeof flag2);
for(int i=;i<maxn;i++) dis2[i]=INF;
for(int i=;i<maxn;i++) G[i].clear();
Ans.clear();
tot=;
} void AddEdge(int x,int y)
{
tot++;
e[tot].from=x;
e[tot].to=y;
G[x].push_back(tot); tot++;
e[tot].from=y;
e[tot].to=x;
G[y].push_back(tot);
} void spfa1()
{
queue<int>Q;
Q.push(); flag1[]=;dis1[]=;
while(!Q.empty())
{
int h=Q.front(); Q.pop(); flag1[h]=;
for(int i=;i<G[h].size();i++)
{
int id=G[h][i];
if(dis1[h]+val[e[id].to]<dis1[e[id].to])
{
dis1[e[id].to]=dis1[h]+val[e[id].to];
if(flag1[e[id].to]==)
{
flag1[e[id].to]=;
Q.push(e[id].to);
}
}
}
}
} void spfa2()
{
queue<int>Q;
Q.push(n); flag2[n]=;dis2[n]=;
while(!Q.empty())
{
int h=Q.front(); Q.pop(); flag2[h]=;
for(int i=;i<G[h].size();i++)
{
int id=G[h][i];
if(dis2[h]+val[e[id].to]<dis2[e[id].to])
{
dis2[e[id].to]=dis2[h]+val[e[id].to];
if(flag2[e[id].to]==)
{
flag2[e[id].to]=;
Q.push(e[id].to);
}
}
}
}
} int main()
{
scanf("%d",&T);
for(int Case=;Case<=T;Case++)
{
init();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int s,x; long long t;
scanf("%lld%d",&t,&s);
val[n+i]=t;
for(int j=;j<=s;j++)
{
scanf("%d",&x);
AddEdge(x,n+i);
}
} spfa1();
spfa2(); long long ans=INF;
for(int i=;i<=n;i++)
{
if(dis1[i]==INF||dis2[i]==INF) continue;
if(max(dis1[i],dis2[i])<ans) ans=max(dis1[i],dis2[i]);
}
printf("Case #%d: ",Case);
if(ans==INF) printf("Evil John\n");
else
{
printf("%lld\n",ans);
for(int i=;i<=n;i++)
{
if(dis1[i]==INF||dis2[i]==INF) continue;
if(max(dis1[i],dis2[i])==ans) Ans.push_back(i);
}
for(int i=;i<Ans.size();i++)
{
printf("%d",Ans[i]);
if(i<Ans.size()-) printf(" ");
else printf("\n");
}
}
} return ;
}
HDU 5521 Meeting的更多相关文章
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 5521 Meeting(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...
- HDU 5521 Meeting【最短路】
今天旁观了Angry_Newbie的模拟区域赛(2015shenyang) 倒着看最先看的M题,很明显的最短路问题,在我看懂的时候他们已经开始敲B了. 后来听说D过了很多人.. D题一看是个博弈,给了 ...
- HDU 5521 Meeting (最短路,dijstra)
题意:有N个点,两个人,其中一个人住在点1,另一个人住在点n,有M个点集,集合内的数表示任意两点的距离为dis ,现在问,如果两个人要见面, 需要最短距离是多少,有哪几个点能被当成见面点. 析:分别对 ...
- HDU - 5521 Meeting (Dijkstra)
思路: 看了好久才看懂题意,文中给了n个点,有m个集合,每个集合有s个点,集合内的每两个点之间有一个权值为t的边,现在有两个人,要从1号点,和n号点,走到同一个顶点,问最少花费以及花费最少的点. 那就 ...
- HDU 5521:Meeting(最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=5521 Meeting Problem Description Bessie and her friend E ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- Meeting HDU - 5521 虚点建图
Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farmer John ...
随机推荐
- Chapter 2 Open Book——3
But when I walked into the cafeteria with Jessica — 但是当我和Jessica 一起走进自助餐厅的时候 trying to keep my eyes ...
- hdu_1403_Longest Common Substring(后缀数组的应用)
题目链接:hdu_1403_Longest Common Substring 题意: 给你两个字符串,然你找最长的公共子串 题解: 后缀数组的经典应用,要找两个字符串的公共子串,那么就相当于找两个串的 ...
- LeetCode OJ 101. Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- php数据排序---array_multisort
PHP代码 <?php $ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); ...
- shell之路【第三篇】流程控制
if语句 if ... fi 语句: if ... else ... fi 语句: if ... elif ... else ... fi 语句. 注意: expression 和方括号([ ])之间 ...
- NSArray的排序问题
1.关于NSArray的排序问题,首先想到的是不是冒泡排序,插入排序....... oc中的NSArray有一种更简单的方式: 例如: NSArray *stringArray=[NSArray ar ...
- 给EditText设置边框
布局文件中加入background属性: <EditText android:layout_width="200dp" android:layout_height=" ...
- android studio布局文件/XML怎么代码补全
android studio中的布局文件代码补全方式是打第一个字母就提示了,而java代码有时候要按快捷键. 布局文件的话呢,要写在标签开始处才提示,在标签闭合处有时候不提示,有时候在内容里也会有不提 ...
- nginx优化缓冲缓存
反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接速度会影响客户的体验: ...
- gnome3
http://askubuntu.com/questions/67753/how-do-i-add-an-application-to-the-dash https://wiki.gnome.org/ ...