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 ...
随机推荐
- Tenth scrum meeting - 2015/11/4
我们的项目开发已经渐渐进入了后期,每个模块都只剩下了一小块任务待做,同学们在做自己的模块的同时也开始对各个同学的模块进行合并. 其中最麻烦的就是视频播放模块与其他模块的合并了,由于该模块的实现需要添加 ...
- Android第三方jar包ClassNotFind
转载请注明http://www.cnblogs.com/vanezkw/archive/2012/06/25/2561393.html 相信很多朋友在使用第三方包时都遇到过此类问题.今天就此问题进行一 ...
- poj1860 bellman—ford队列优化 Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22123 Accepted: 799 ...
- django-cms 代码研究(五)深入(代码结构)
前言: 前戏已经做得比较充分了,下面我们开始步入正题. 代码结构: cms |--admin (猜测是admin界面的二次开发和改良) |--cache (猜测是缓存机制的处理) |--extensi ...
- 【SpringMVC】SpringMVC系列9之Model数据返回到View
9.Model数据返回到View 9.1.概述 Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体 ...
- jquery优势
1.轻量 2.开源 3.选择器出色 可以支持几乎 css1到css3 的所有选择器 4.简单的修改页面 不同的浏览器对于css的支持程度是不同的,jquery通过封装javascript的代码, ...
- python时间转换
#设a为字符串 import time a = "2011-09-28 10:00:00" #中间过程,一般都需要将字符串转化为时间数组 time.strptime(a,'%Y-% ...
- Solr5.3.1 SolrJ查询索引结果
通过SolrJ获取Solr检索结果 1.通过SolrParams的方式提交查询参数 SolrClient solr = new HttpSolrClient("http://localhos ...
- 在eclipse中进行Struts2项目的配置
Struts2是一个比较出色的基于MVC设计模式的框架,是由Struts1和WebWork发展而来的,性能也比较稳定,现在是Apache软件基金会的一个项目,下面就来配置Struts2进行初始化的开发 ...
- Java for LeetCode 037 Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...