POJ1135 Domino Effect(SPFA)
题目大概是,普通骨牌连接两张关键骨牌,一旦一张关键骨牌倒下与其相邻的普通骨牌也倒下,普通骨牌倒下与其相邻的骨牌也倒下。给出所有有普通骨牌相连的两个关键骨牌之间普通骨牌倒下所需时间,问1号关键骨牌开始倒下后最后一张骨牌倒下的时间和位置。
居然是最短路。。记dist[u]为起点骨牌1到关键骨牌u的最短时间,跑个单源最短路可得出。最后倒下的骨牌,有两种情况:
- 倒下的是关键骨牌u,那么倒下的时间就是dist[u]
- 倒下的是关键骨牌u和v之间某张普通骨牌,那么倒下的时间就是 (dist[u]+dist[v]+time(u,v))/2,因为:
- dist[u]=dist[v]显然成立,不等于的情况不妨设dist[u]<dist[v];
- 那么过了dist[u]的时间后,通往u点的骨牌到正好达u点,而通往v点的还需dist[v]-dist[u]的时间到达v;
- 因而两边这时还有dist[v]-dist[u]+time(u,v)的时间长度,两边同时倒就还需要(dist[v]-dist[u]+time(u,v))/2的时间;
- 所以总共需要(dist[v]-dist[u]+time(u,v))/2+dist[u],即(dist[v]+dist[u]+time(u,v))/2的时间。
这样分别搞搞这两种情况,就能找到答案。
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define MAXN 555
#define MAXM 555*555*2 struct Edge{
int u,v,cost,next;
}edge[MAXM];
int head[MAXN],NE,n;
void addEdge(int a,int b,int c){
edge[NE].u=a; edge[NE].v=b; edge[NE].cost=c; edge[NE].next=head[a];
head[a]=NE++;
} int d[MAXN];
void SPFA(int vs){
memset(d,,sizeof(d));
d[vs]=;
bool vis[MAXN]={};
vis[vs]=;
queue<int> que;
que.push(vs);
while(!que.empty()){
int u=que.front(); que.pop();
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
if(d[v]>d[u]+edge[i].cost){
d[v]=d[u]+edge[i].cost;
if(!vis[v]){
vis[v]=;
que.push(v);
}
}
}
vis[u]=;
}
}
int main(){
int m,a,b,c,cse=;
while(~scanf("%d%d",&n,&m) && (n||m)){
NE=;
memset(head,-,sizeof(head));
while(m--){
scanf("%d%d%d",&a,&b,&c);
addEdge(a,b,c);
addEdge(b,a,c);
}
SPFA();
double res=-;
bool flag=;
for(int i=; i<=n; ++i){
if(d[i]>res){
res=d[i];
a=i;
}
}
for(int i=; i<NE; i+=){
double tmp=(d[edge[i].u]+d[edge[i].v]+edge[i].cost)/2.0;
if(tmp>res){
res=tmp;
flag=;
a=edge[i].u; b=edge[i].v;
if(a>b) swap(a,b);
}
}
printf("System #%d\n",++cse);
if(flag) printf("The last domino falls after %.1f seconds, between key dominoes %d and %d.\n\n",res,a,b);
else printf("The last domino falls after %.1f seconds, at key domino %d.\n\n",res,a);
}
return ;
}
POJ1135 Domino Effect(SPFA)的更多相关文章
- POJ 1135 Domino Effect (spfa + 枚举)- from lanshui_Yang
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- POJ 1135 Domino Effect(Dijkstra)
点我看题目 题意 : 一个新的多米诺骨牌游戏,就是这个多米诺骨中有许多关键牌,他们之间由一行普通的骨牌相连接,当一张关键牌倒下的时候,连接这个关键牌的每一行都会倒下,当倒下的行到达没有倒下的关键牌时, ...
- 「日常训练」「小专题·图论」Domino Effect(1-5)
题意 分析 这题几乎就是一条dijkstra的问题.但是,如何考虑倒在中间? 要意识到这题求什么:单源最短路的最大值.那么有没有更大的?倒在中间有可能会使它更大. 但是要注意一个问题:不要把不存在的边 ...
- 「POJ 1135」Domino Effect(dfs)
BUPT 2017 Summer Training (for 16) #3G 题意 摆好的多米诺牌中有n个关键牌,两个关键牌之间有边代表它们之间有一排多米诺牌.从1号关键牌开始推倒,问最后倒下的牌在哪 ...
- UVA - 211 The Domino Effect(多米诺效应)(dfs回溯)
题意:根据多米诺骨牌的编号的7*8矩阵,每个点可以和相邻的点组成的骨牌对应一个编号,问能形成多少种由编号组成的图. 分析:dfs,组成的图必须有1~28所有编号. #pragma comment(li ...
- POJ 1135 -- Domino Effect(单源最短路径)
POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...
- unity3d 制造自己的水体water effect(二)
前篇:unity3d 制造自己的水体water effect(一) 曲面细分:Unity3d 使用DX11的曲面细分 PBR: 讲求基本算法 Unity3d 基于物理渲染Physically-Base ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- D3D9 effect (hlsl)(转)
转:http://blog.csdn.net/leonwei/article/details/8212800 effect其实整合了shader和render state的控制两大部分内容 9.1 ...
随机推荐
- JS获取汉字首字母
//获取 汉字首字母 function makePy(str) { if (typeof (str) != "string") throw new Error(-1, " ...
- FZU2127:养鸡场
Problem Description Jason买来了n米长的竹篱笆,打算将n米长的竹篱笆所实用来围成一个三角形的养鸡场.为方便起见.养鸡场三条边的长度都为正整数. 同一时候.他想让自己的养鸡场看起 ...
- [Effective JavaScript 笔记]第61条:不要阻塞I/O事件队列
js程序是构建在事件之上的.输入可能来自不同的外部源.在一些语言中,我们习惯地编写代码来等待某个特定的输入. var text=downloadSync('http://example.com/fil ...
- [Educational Codeforces Round 16]C. Magic Odd Square
[Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...
- Coursera台大机器学习课程笔记3 – 机器学习的分类和机器学习的可能性
第三讲比较简单,参考:http://www.cnblogs.com/HappyAngel/p/3466527.html 第四讲很抽象,尤其是第四个视频,目的仍然是为了证明机器学习是可能的,不过这个博主 ...
- apache2:Invalid option to WSGI daemon process definition
版本说明: ubuntu 12.04 server /apache 2.2 / mod_wsgi 3.3 / python 2.7.3 /django 1.7 在ubuntu12的服务器上配置djan ...
- macbook air 安装win7双系统
转自: http://jingyan.baidu.com/article/6d704a13f99f1a28da51ca49.html 1)遇到“No bootable device-insert bo ...
- bootstrap的select2校验及不影响原来的格式
<style> .has-error .select2-choice, .has-error .select2-choices, .has-error.simple .select2-ch ...
- Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
我用的Maven版本为最新版:3.3.9,但是我执行一个简单的clean命令会报如下错误: Exception in thread "main" java.lang.Unsuppo ...
- HDU1712周期
ACboy needs your help Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...