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 思路: 打表找规律+大数运算 首先我 ...
随机推荐
- Python Kafka Client 性能测试
一.前言 由于工作原因使用到了 Kafka,而现有的代码并不能满足性能需求,所以需要开发高效读写 Kafka 的工具,本文是一个 Python Kafka Client 的性能测试记录,通过本次测试, ...
- MongoDB备份(mongodump)与恢复(mongorestore)工具实践
mongodump和mongorestore实践 1.mongodump备份工具 mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档 ...
- 【Java】面向对象 - 封装
继承 封装 多态 重新搞一波 复习巩固 简单记录 慕课网 imooc Java 零基础入门-Java面向对象-Java封装 封装 封装是什么? 将类的某些信息隐藏在类内部,不允许外部程序直接访问 通过 ...
- 【Oracle】静默安装oracle 11.2.0.4 超详细
安装oracle 1.执行脚本完成初始化oracle环境 2.解压缩oracle的压缩包,单实例1个,rac是2两个压缩包 3.修改response下的db_install.rsp 修改内容如下: - ...
- ctfhub技能树—sql注入—Refer注入
手注 查询数据库名 查询数据表名 查询字段名 查询字段信息 脚本(from 阿狸) #! /usr/bin/env python # _*_ coding:utf-8 _*_ url = " ...
- mybatis-plubs条件构造器中的方法所对应的sql语法
[通用条件:] [比较大小: ( =, <>, >, >=, <, <= )] eq(R column, Object val); // 等价于 =,例: eq(& ...
- SW3518中文规格书
SW3518 是一款高集成度的多快充协议双口充电芯片, 支持 A+C 口任意口快充输出, 支持双口独立限流. 其集成了 5A 高效率同步降压变换器, 支持 PPS/PD/QC/AFC/FCP/SCP/ ...
- EFCore 5 新特性 —— Savepoints
EFCore 5 中的 Savepoints Intro EFCore 5中引入了一个新特性,叫做 Savepoints,主要是事务中使用,个人感觉有点类似于 Windows 上的系统还原点,如果事务 ...
- Django前后端分离项目部署
vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...
- JavaScript学习总结(基础知识)
js代码引入 方式1: <script> alert('欢迎来到德玛西亚!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script sr ...