题意:

多米诺骨牌效应:若干个关键牌相连,关键牌之间含有普通牌,关键牌倒下后其所在的行的普通牌全部倒下。求从推倒1号关键牌开始,最终倒下的牌的位置及时间。

分析:

最终倒下的牌的位置有两种情况,要么是正好为关键牌,要么是在两个关键牌之间的普通牌。前者可以利用最短路求出每个关键牌倒下的时间,而各行普通牌全部倒下的时间为该行两个关键牌倒下时间与该行从一端倒向另一端的时间和的一半,即 (t[i]+t[j]+e[i][j])/2,选出两种情况的最大值进行比较,两者中较大值即为多米诺骨牌完全倒下的时间。

代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
#define rep(i,a,n) for(int i =(a); i < (n); i++)
#define sa(n) scanf("%d",&(n))
int n;
const int maxn=550;
const int INF=0x3fffffff;
int t[maxn],s[maxn],e[maxn][maxn];
void dijkstra()
{
int u;
rep(i,0,n){
t[i]=e[0][i];s[i]=0;
}
t[0]=0;
rep(i,0,n-1){
int mins = INF;
rep(j,0,n){
if(!s[j]&&t[j]<mins){
u=j;
mins=t[j];
}
}
s[u]=1;
rep(k,0,n){
if(!s[k]&&e[u][k]<INF)
t[k]=min(t[k],e[u][k]+t[u]);
}
}
}
int main(void)
{
int m,c=1;
int a,b,l;
sa(n);sa(m);
while(n!=0||m!=0){
fill(t,t+maxn,INF);
rep(i,0,n) rep(j,0,n) e[i][j]=INF;
rep(i,0,m){
sa(a);sa(b);sa(l);
e[a-1][b-1]=e[b-1][a-1]=l;
} dijkstra(); double maxtime=0;
int p=1;
rep(i,0,n){
if(maxtime<t[i]){
maxtime=t[i];
p=i+1;
}
}
double time,emax=0;
int p1,p2;
rep(i,0,n){
rep(j,0,n){
if(e[i][j]<INF){
time=(t[i]+t[j]+e[i][j])/2.0;
if(time>emax){
emax=time;
p1=i+1;p2=j+1;
}
}
}
}
printf("System #%d\n",c++);
if(maxtime<emax)
printf("The last domino falls after %.1f seconds, between key dominoes %d and %d.\n\n",emax,p1,p2);
else
printf("The last domino falls after %.1f seconds, at key domino %d.\n\n",maxtime,p);
sa(n);sa(m);
}
return 0;
}

最新文章

  1. 数据库操作提示:Specified key was too long; max key length is 767 bytes
  2. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
  3. ocket.chat 使用 Meteor 开发的实时协作工具,类似 丁丁。
  4. python 类型判断-- isinstance函数
  5. git 学习笔记3--status flow
  6. angJs使选中的li背景颜色不同
  7. SharePoint安全 - SharePoint网站常用页面URL索引
  8. (转)SQL按照日、周、月、年统计数据
  9. 玩转ButterKnife注入框架
  10. 快捷查看dll的PublicKeyToken
  11. 统计单词频率--map
  12. tcp/ip详解 卷1 -- 协议概述
  13. 汇编编译器(masm.exe)对jmp的相关处理
  14. java 项目得到jar和classes路径
  15. Python进阶开发之元类编程
  16. Navicat之MySQL连接(二)
  17. B - Housewife Wind-树链剖分-树状数组
  18. java学习之方法内部类
  19. 通过maven-assembly-plugin将Springboot项目打包成tar.gz压缩包,在Linux环境可执行脚本直接安装成系统服务
  20. J 判断二叉树每个结点的权值是否关于根节点完全对称

热门文章

  1. 关于通过spring-web的ServletRequestUtils工具类对获取getParameter传参的默认转换基本数据类型的学习
  2. es6核心特性-数组扩展
  3. 阿里云服务器安装ss使用
  4. elasticsearch.yml 配置说明
  5. adobe开发软件激活
  6. Java基础(十一)--Serializable和Externalizable接口实现序列化
  7. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (一) -- 安装 AMQP 扩展和 Direct Exchange 模式
  8. 网络编程 - 协议遇到IO自动切换
  9. li标签和checkbox绑定
  10. idea导入本地idea的web项目(服务器用的是tomcat)