2015ACM/ICPC亚洲区沈阳站-重现赛 M - Meeting (特殊建边,最短路)

题意:有\(n\)个点,\(m\)个集合,集合\(E_i\)中的点都与集合中的其它点有一条边权为\(t_i\)的边,现在问第\(1\)个点和第\(n\)个点到某个点的路径最短,输出最短路径和目标点,如果不满足条件则输出\(Evil John\).
题解:题目所给的边数关系太复杂了,我们可以让每个集合中的所有点都与一个虚拟节点连边,而这些点两两却不连,然后再去找\(1\)个和第\(n\)个点的最短路径,不难发现,最终得到的路径为\(dis[i]/2\),所以我们只要用虚拟节点建边然后跑两次dijkstra,最后判断输出一下即可.
代码:
struct misaka{
ll val;
ll out;
}e; ll t;
ll n,m;
ll u;
ll cost,E;
vector<misaka> v[N];
ll dis[2][N];
bool st[N];
vector<ll> ans; void dijkstra(ll start,int op){
me(st,false,sizeof(st));
for(int i=0;i<N;++i) dis[op][i]=INF;
dis[op][start]=0; priority_queue<PLL,vector<PLL>,greater<PLL>> h;
h.push({0,start}); while(!h.empty()){
auto tmp=h.top();
h.pop(); ll num=tmp.se;
ll dist=tmp.fi;
if(st[num]) continue;
st[num]=true; for(auto w:v[num]){
ll j=w.out;
if(dis[op][j]>dist+w.val){
dis[op][j]=dist+w.val;
h.push({dis[op][j],j});
}
}
}
} int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
int p=1;
while(t--){
for(ll i=0;i<N;++i){
v[i].clear();
}
cin>>n>>m;
for(ll i=1;i<=m;++i){
cin>>cost;
cin>>E;
for(ll j=1;j<=E;++j){
cin>>u;
e.out=n+i;
e.val=cost;
v[u].pb(e);
e.out=u;
v[n+i].pb(e);
}
}
dijkstra(1,0);
dijkstra(n,1); ll res=INF;
ans.clear();
for(ll i=1;i<=n;++i){
res=min(res,max(dis[0][i],dis[1][i]));
}
if(res>=INF){
cout<<"Case #"<<p<<": Evil John"<<endl;
}
else{
cout<<"Case #"<<p<<": "<<res/2<<endl;
for(ll i=1;i<=n;++i){
if(max(dis[0][i],dis[1][i])==res){
ans.pb(i);
}
}
for(int i=0;i<(int)ans.size();++i){
cout<<ans[i];
if(i!=(int)ans.size()-1) cout<<" ";
}
cout<<'\n';
}
p++;
} return 0;
}
2015ACM/ICPC亚洲区沈阳站-重现赛 M - Meeting (特殊建边,最短路)的更多相关文章
- hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
废话: 这道题很是花了我一番功夫.首先,我不会kmp算法,还专门学了一下这个算法.其次,即使会用kmp,但是如果暴力枚举的话,还是毫无疑问会爆掉.因此在dfs的基础上加上两次剪枝解决了这道题. 题意: ...
- 2015ACM/ICPC亚洲区沈阳站重现赛-HDU5512-Pagodas-gcd
n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...
- 2015ACM/ICPC亚洲区沈阳站-重现赛 B - Bazinga (KMP)
题意:给你\(n\)个字符串,\(s_1,s_2,...,s_n\),对于\(i(1\le i\le n)\),找到最大的\(i\),并且满足\(s_j(1\le j<i)\)不是\(s_i\) ...
- 2015ACM/ICPC亚洲区沈阳站-重现赛 D - Pagodas
题意:有\(n\)个数,开始给你两个数\(a\)和\(b\),每次找一个没出现过的数\(i\),要求满足\(i=j+k\)或\(i=j-k\),当某个人没有数可以选的时候判他输,问谁赢. 题解:对于\ ...
- HDU 6227.Rabbits-规律 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
Rabbits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- HDU 6225.Little Boxes-大数加法 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
整理代码... Little Boxes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/O ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛赛题
今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛
C.Recursive sequence 求ans(x),ans(1)=a,ans(2)=b,ans(n)=ans(n-2)*2+ans(n-1)+n^4 如果直接就去解...很难,毕竟不是那种可以直 ...
- 2017ACM/ICPC亚洲区沈阳站-重现赛
HDU 6222 Heron and His Triangle 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6222 思路: 打表找规律+大数运算 首先我 ...
随机推荐
- 基于腾讯云存储网关 CSG 实现视频在线转码分发
一.背景 随着越来越多的传统业务云化和云端业务发展,数据上云和云端数据处理领域的需求爆发式增长.腾讯云存储网关CSG提供一键部署开箱即用的便捷模式,深度结合COS对象存储生态,为用户提供方便快捷的数据 ...
- 【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)
文章目录 UML基本介绍 UML图 UML类图 类图-依赖关系(Dependence) 类图-泛化关系(generalization) 类图-实现关系(Implementation) 类图-关联关系( ...
- 第一章:起步(python环境搭建)
Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...
- Maven 本地仓库
概述 Maven 的本地资源库是用来存储所有项目的依赖关系(插件 Jar 和其他文件,这些文件被 Maven 下载)到本地文件夹.很简单,当你建立一个 Maven 项目,所有相关文件将被存储在你的 M ...
- jemeter断言和性能分析
一.添加断言 1.原因:检查是否有该结果,一般一个请求过去除了400和500的只要通过的都会代表请求成功,比如登录页面及时填写了错误密码,虽然会返回密码错误,但这个请求还是成功的,所以我们要添加断言, ...
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
小结: 1.注意使用限制 Locking reads are only possible when autocommit is disabled (either by beginning transa ...
- Hash Array Mapped Trie
Hash Array Mapped Trie Python\hamt.c
- functools.singledispatchmethod(Python 3.8) | 码农网 https://www.codercto.com/a/83245.html
functools.singledispatchmethod(Python 3.8) | 码农网 https://www.codercto.com/a/83245.html
- Python基础(列表、元组)
列表 在Python中列表用[]来表示,中间的元素可以是任何类型,用逗号分隔.列表是可变类型. 列表常用操作:增删改查. names = ["小明","小红", ...
- CQOI 2006 简单题
CQOI 2006 简单题 有一个 n 个元素的数组,每个元素初始均为 0.有 m 条指令,要么让其中一段连续序列数字反转--0 变 1,1 变 0(操作 11),要么询问某个元素的值(操作 2). ...