「POJ 1135」Domino Effect(dfs)
BUPT 2017 Summer Training (for 16) #3G
题意
摆好的多米诺牌中有n个关键牌,两个关键牌之间有边代表它们之间有一排多米诺牌。从1号关键牌开始推倒,问最后倒下的牌在哪里,以及时刻。
题解
注意最后倒下的可能不是关键牌,而是关键牌之间的牌。
dfs找出每个关键牌最早到达的时间,也就是它们倒下的时刻。然后再对每条边,计算边上最后倒下的牌的时间。
其实就是跑一遍最短路。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100001
#define inf 0x3f3f3f3f
using namespace std;
struct edge{
int to,next;
double w;
}e[N<<1];
int head[N],cnt;
void add(int u,int v,int w){
e[++cnt]=(edge){v,head[u],(double)w};
head[u]=cnt;
}
int n,m;
int test;
bool one;
int last, second;
double idx[N];
double ans;
void dfs(int x,int fa){
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==fa)continue;
if(idx[x]+e[i].w<idx[v]){
idx[v]=idx[x]+e[i].w;
dfs(v,x);
}
}
}
int main(){
while(scanf("%d%d",&n,&m),n||m){
cnt=1;
memset(head,0,sizeof head);
for(int i=1,a,b,l;i<=m;++i){
scanf("%d%d%d",&a,&b,&l);
add(a,b,l);add(b,a,l);
}
printf("System #%d\n",++test);
for(int i=2;i<=n;++i)idx[i]=1000000000.0;
dfs(1,0);
ans=-1;
one=true;
for(int i=1;i<=n;++i){
if(idx[i]>ans){
ans=idx[i];
last=i;
}
}
for(int i=2;i<=cnt;++i){
double time=(idx[e[i].to]+idx[e[i^1].to]+e[i].w)*1./2;
if(time>ans){
ans=time;
one=false;
last=e[i].to;second=e[i^1].to;
}
}
printf("The last domino falls after %.1f seconds, ", ans);
if(one)printf("at key domino %d.\n", last);
else{
if(last>second)swap(last,second);
printf("between key dominoes %d and %d.\n", last, second);
}
puts("");
}
return 0;
}
「POJ 1135」Domino Effect(dfs)的更多相关文章
- 「日常训练」「小专题·图论」Domino Effect(1-5)
题意 分析 这题几乎就是一条dijkstra的问题.但是,如何考虑倒在中间? 要意识到这题求什么:单源最短路的最大值.那么有没有更大的?倒在中间有可能会使它更大. 但是要注意一个问题:不要把不存在的边 ...
- 「NOIP 2020」微信步数(计数)
「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...
- POJ 1135 Domino Effect(Dijkstra)
点我看题目 题意 : 一个新的多米诺骨牌游戏,就是这个多米诺骨中有许多关键牌,他们之间由一行普通的骨牌相连接,当一张关键牌倒下的时候,连接这个关键牌的每一行都会倒下,当倒下的行到达没有倒下的关键牌时, ...
- 「专题训练」Machine Schedule(HDU-1150)
题意 在一个工厂,有两台机器\(A, B\)生产产品.\(A\)机器有\(n\)种工作模式(模式\(0\),模式\(1\)--模式\(n-1\)).\(B\)机器有\(m\)种工作模式(模式\(0\) ...
- 「暑期训练」「Brute Force」 Bitonix' Patrol (CFR134D1D)
题意 有n" role="presentation">nn个站点,排成圆形,每站间距m" role="presentation"> ...
- 【POJ - 3984】迷宫问题(dfs)
-->迷宫问题 Descriptions: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ...
- 「算法笔记」快速傅里叶变换(FFT)
一.引入 首先,定义多项式的形式为 \(f(x)=\sum_{i=0}^n a_ix^i\),其中 \(a_i\) 为系数,\(n\) 为次数,这种表示方法称为"系数表示法",一个 ...
- UVA - 211 The Domino Effect(多米诺效应)(dfs回溯)
题意:根据多米诺骨牌的编号的7*8矩阵,每个点可以和相邻的点组成的骨牌对应一个编号,问能形成多少种由编号组成的图. 分析:dfs,组成的图必须有1~28所有编号. #pragma comment(li ...
- poj 3009 Curling 2.0 (dfs )
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11879 Accepted: 5028 Desc ...
随机推荐
- 【RSYSLOG】The Property Replacer【转】
最近在调整日志平台的日志格式,一下是RSYSLOG的 Property Replacer 说明.鉴于RSYSLOG官网略坑,转发一下,原地址忘记了- - ||| The property replac ...
- mysql 小数转换成百分数查出(保留两位小数百分数)
SELECT id as 'ID',GROUP_CONCAT(concat(truncate(royalties *100,2),'%')) as '比例' FROM yser FROM id in( ...
- 软件工程(FZU2015) 助教总结
SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 本次构建之法-SE助教工作,和福州大学张老师协作,福大学生基本发挥出了一定水平,在此做个小结. 教师 张老师本身的SE教学 ...
- [2017BUAA软工助教]个人项目准备工作
BUAA软工个人项目准备工作 零.注册Github个人账号(你不会没有吧..) 这是Git的使用教程: http://www.cnblogs.com/schaepher/p/5561193.html ...
- 【问题解决方案】之 Word 公式编辑器 使用小tips
输入空格:shift+Ctrl+space 换行:直接回车.之后在上方菜单栏中选择"在等号处对齐"
- HDU 1089 到1096 a+b的输入输出练习
http://acm.hdu.edu.cn/showproblem.php?pid=1089 Problem Description Your task is to Calculate a + b.T ...
- 08-webpack的介绍
在这里我仅仅的是对webpack做个讲解,webpack这个工具非常强大,解决了我们前端很繁琐的一些工具流程繁琐的事情.如果感兴趣的同学,简易还是看官网吧. 中文链接地址:https://www.we ...
- MYSQL: 1292 - Truncated incorrect DOUBLE value: '184B3C0A-C411-47F7-BE45-CE7C0818F420'
MySQL Bugs: #63112: Truncated incorrect DOUBLE valuehttps://bugs.mysql.com/bug.php?id=63112 Error Co ...
- js-其他跨域技术(JSONP`Comet)
###1. JSONP JSONP由两部分组成:回调函数和数据 JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL eg: function ha ...
- [FreeBuff]Trojan.Miner.gbq挖矿病毒分析报告
Trojan.Miner.gbq挖矿病毒分析报告 https://www.freebuf.com/articles/network/196594.html 竟然还有端口转发... 这哥们.. 江民安全 ...