点我看题目

题意 : 一个新的多米诺骨牌游戏,就是这个多米诺骨中有许多关键牌,他们之间由一行普通的骨牌相连接,当一张关键牌倒下的时候,连接这个关键牌的每一行都会倒下,当倒下的行到达没有倒下的关键牌时,这个关键牌也会倒下,然后与这个关键牌相连接的所有行都会倒下,每一行有两个端点也就是两个关键牌,可以从任意一个端点开始倒下,也可以从两个端点同时开始倒下,从第一张骨牌开始倒,最后倒下的牌的位置以及时间。

思路 : 先利用Dijkstra求出每张关键牌倒下的时间time[i],即求出第一张关键牌到其他关键牌的最短路径,然后求出众最短路径中最大的那个,即为time1。再计算每一行倒下的时间,每一行的两个关键牌的位置设为i,j,则这一行倒下的时间为(time[i]+time[j]+Edge[i][j])/2.0,找到最大值即为time2。求出time1,time2的最大值,即为我们所求。

因为最后那个%.1lf的问题还错了一遍,交C++即可。

//Domino Effect
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm> using namespace std ; const int INF = ;
const int maxn = ;
int n, m;
int Edge[maxn][maxn] ;
bool vis[maxn] ;
int timee[maxn] ; void dijkstra()
{
for(int i = ; i <= n ; i++)
{
timee[i] = Edge[][i] ;
vis[i] = false ;
}
timee[] = ;
vis[] = true ;
for(int i = ; i < n ; i++)
{
int minn = INF , u = ;
for(int j = ; j <= n ; j++)
{
if(!vis[j] && timee[j] < minn)
{
u = j ;
minn = timee[j] ;
}
}
vis[u] = true ;
for(int k = ; k <= n ; k++)
{
if(!vis[k] && Edge[u][k] < INF && timee[u] + Edge[u][k] < timee[k])
timee[k] = timee[u] + Edge[u][k] ;
}
}
double time1 = -999999999.0 ;
int flag ;
for(int i = ; i <= n ; i++)
{
if(timee[i] > time1)
time1 = timee[i],flag = i ;
}
double time2 = -9999999999.0 ;
int pos1,pos2 ;
for(int i = ; i <= n ; i++)
{
for(int j = ; j <= n ; j++)
{
double temp = (timee[i] + timee[j] + Edge[i][j])/2.0 ;
if(Edge[i][j] < INF && temp > time2)
{
time2 = temp ;
pos1 = i ;
pos2 = j ;
}
}
}
if(time1 < time2)
printf("The last domino falls after %.1lf seconds, between key dominoes %d and %d.\n\n",time2,pos1,pos2) ;
else
printf("The last domino falls after %.1lf seconds, at key domino %d.\n\n",time1,flag) ;
}
int main()
{
int cas = ;
while(~scanf("%d %d",&n,&m))
{
if(n == && m == )
break ;
int u,v ,w ;
for(int i = ; i <= n ; i++)
for(int j = ; j <= n ; j++)
Edge[i][j] = INF ;
for(int i = ; i < m ; i++)
{
scanf("%d %d %d",&u,&v,&w) ;
Edge[u][v] = w ;
Edge[v][u] = w ;
}
printf("System #%d\n",cas++) ;
dijkstra() ;
}
return ;
}

POJ 1135 Domino Effect(Dijkstra)的更多相关文章

  1. POJ 1135 -- Domino Effect(单源最短路径)

     POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...

  2. 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 ...

  3. POJ 1135 Domino Effect (Dijkstra 最短路)

    Domino Effect Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9335   Accepted: 2325 Des ...

  4. POJ 1135.Domino Effect Dijkastra算法

    Domino Effect Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10325   Accepted: 2560 De ...

  5. [POJ] 1135 Domino Effect

    Domino Effect Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12147 Accepted: 3046 Descri ...

  6. 「POJ 1135」Domino Effect(dfs)

    BUPT 2017 Summer Training (for 16) #3G 题意 摆好的多米诺牌中有n个关键牌,两个关键牌之间有边代表它们之间有一排多米诺牌.从1号关键牌开始推倒,问最后倒下的牌在哪 ...

  7. POJ 1797 Heavy Transportation(Dijkstra)

    http://poj.org/problem?id=1797 题意 :给出N个城市M条边,每条边都有容量值,求一条运输路线使城市1到N的运输量最大. 思路 :用dijkstra对松弛条件进行变形.解释 ...

  8. 「日常训练」「小专题·图论」Domino Effect(1-5)

    题意 分析 这题几乎就是一条dijkstra的问题.但是,如何考虑倒在中间? 要意识到这题求什么:单源最短路的最大值.那么有没有更大的?倒在中间有可能会使它更大. 但是要注意一个问题:不要把不存在的边 ...

  9. POJ1135 Domino Effect(SPFA)

    题目大概是,普通骨牌连接两张关键骨牌,一旦一张关键骨牌倒下与其相邻的普通骨牌也倒下,普通骨牌倒下与其相邻的骨牌也倒下.给出所有有普通骨牌相连的两个关键骨牌之间普通骨牌倒下所需时间,问1号关键骨牌开始倒 ...

随机推荐

  1. form表单按enter键自动提交的问题

    废话不多说.直接上代码. 1:form表单按enter键自动提交的情况 <!doctype html> <html lang="en"> <head& ...

  2. hasLayout与Block formatting contexts的学习(上)

    hasLayout与Block formatting contexts的学习 @(css BFC)[IE hasLayout|妙瞳] hasLayout是什么? haslayout 是Windows ...

  3. oracle添加表字段跟修改表字段属性

    添加字段 alter table mid_contactinfo add(status varchar(20),createdate varchar(50),modifydate varchar(50 ...

  4. N_F1_APPROVE

    package nc.bs.pub.action; import java.util.ArrayList; import java.util.Hashtable; import java.util.L ...

  5. Thread多线程stopSleep顺序问题

    今天呢,学习了javase多线程,里面的睡眠sleep问题有点困扰: public class Thread_06_stopSleep{ public static void main(String[ ...

  6. Jquery Ajax Get示例

      $.ajax({ type: "GET", url:"ajax_url.php", cache: false, data:{'action':'ABC',' ...

  7. node c/c++扩展模块build失败.

    "深入浅出nodejs 朴灵" 例子 c/c++扩展模块 http://diveintonode.org/ 在作者的帮助下,build成功. 下面贴出的hello.cc和bindi ...

  8. 07_Java8新增的Lambda表达式

    [Lambda表达式概述] Lambda表达式支持将代码块作为方法参数,Lambda表达式允许将使用简洁的代码来创建只有一个抽象方法的接口的实例.(这种接口称为函数式接口) [入门实例] packag ...

  9. C# 刷新当前窗体

    在有多个窗体时,刷新当前激活的窗体 在MainForm.cs中: private void m_reflashtoolStripButton1_Click(object sender, EventAr ...

  10. KMP的模版实现(以hdu1711为例)

    贴代码,觉得带template的有一些大材小用……不过还是按自己风格写吧! /************************************************************* ...