「日常训练」「小专题·图论」Domino Effect(1-5)
题意
分析
这题几乎就是一条dijkstra的问题。但是,如何考虑倒在中间?
要意识到这题求什么:单源最短路的最大值。那么有没有更大的?倒在中间有可能会使它更大。
但是要注意一个问题:不要把不存在的边(边长为inf)算进去;另外,n=1的情况需要注意。
代码
// Origin:
// Theme: Graph Theory (Basic)
// Date: 080618
// Author: Sam X
//#include <bits/stdc++.h>
#include <iostream>
#include <utility>
#include <iomanip>
#include <cstring>
#include <cmath>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
using namespace std;
typedef long long ll;
typedef unsigned long long ul;
typedef pair<int,int> pi;
typedef pair<int,pi> pii;
int dist[505][505];
int main()
{
int n,m,kase=0;
while(cin>>n>>m)
{
if(!n && !m) break;
memset(dist,0x3f,sizeof(dist));
rep(i,1,n) dist[i][i]=0;
rep(i,1,m)
{
int x,y,z; cin>>x>>y>>z;
dist[x][y]=dist[y][x]=z;
}
if(n==1)
{
cout<<"System #"<<++kase<<"\nThe last domino falls after 0.0 seconds, at key domino 1.\n\n";
continue;
}
int d[505]; memset(d,0x3f,sizeof(d));
d[1]=0;
bool vis[505]; ZERO(vis);
rep(i,1,n)
{
int mind=0x3f3f3f3f,x=-1;
rep(j,1,n) if(!vis[j] && d[j]<mind) mind=d[x=j];
if(x==-1) break;
vis[x]=true;
rep(i,1,n)
{
d[i]=min(d[i],d[x]+dist[x][i]);
}
}
//rep(i,1,n) cout<<d[i]<<" "; cout<<endl;
double ans=-1,ans_mid=-1;
int end=-1,lend=-1,rend=-1,maxd=-1;
bool ismid=false;
rep(i,2,n)
{
if(d[i]>ans)
{
ans=d[end=i];
}
//maxd=max(d[i],maxd);
}
rep(i,1,n)
{
rep(j,i+1,n)
{
if(dist[i][j]==0x3f3f3f3f) continue;
double tmp=(d[i]+d[j]+dist[i][j])/2.0;
if(tmp>ans_mid)
{
lend=i; rend=j;
ans_mid=max(tmp,ans_mid);
}
}
}
ismid=ans_mid-ans>1e-8;
cout<<"System #"<<++kase<<endl<<"The last domino falls after "<<fixed<<setprecision(1)<<double(ismid?ans_mid:ans)<<" seconds, ";
if(!ismid)
{
cout<<"at key domino "<<end<<"."<<endl;
}
else
{
cout<<"between key dominoes "<<lend<<" and "<<rend<<"."<<endl;
}
cout<<endl;
}
return 0;
}
「日常训练」「小专题·图论」Domino Effect(1-5)的更多相关文章
- 「日常训练」「小专题·图论」 Cow Contest (1-3)
题意 分析 问题是要看出来这是个floyd闭包问题.我没看出来- - 分析之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080 ...
- 「日常训练」「小专题·图论」 Frogger (1-1)
题意 分析 变形的dijkstra. 分析题意之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080518 // Author: ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」「小专题·USACO」 Ski Course Design (1-4)
题目 以后补 分析 mmp这题把我写蠢哭了 我原来的思路是什么呢? 每轮找min/max,然后两个决策:升min/降max 像这样子dfs找最优,然后花式剪枝 但是一想不对啊,这才1-4,哪有那么复杂 ...
- 「日常训练」「小专题·USACO」 Wormholes(1-4)
题意 之后补充. 分析 这是一条很好的考察递归(或者说搜索)的题目.它的两个过程(建立初步解,验证)都用到了递归(或者说运用递归可以相当程度的减少代码量). 具体实现见代码.注意,为了使用std::p ...
- 「日常训练」「小专题·USACO」 Barn Repair(1-4)
题意 之后补. 分析 这题同样也很精巧.我们不妨思考一下,如果只允许用一块木板,那么要购买多少距离?是整个的距离吗?不是,是从第一个到最后一个(哈哈哈哈哈哈哈).但是,不包括第一个的"左边& ...
- 「日常训练」「小专题·USACO」 Broken Necklace(1-2)
题意 圆形链条,打断一处可以形成一条链.问在哪个地方开始打断,能够形成最大的连续颜色(白色视作同样的颜色)? 分析 说起来很高级,但是我们实际上并不需要穷举打断的地方,只需要把串重复三回啊三回.然后从 ...
- 「日常训练」 Fire!(UVA-11624)
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...
- 「日常训练」Card Game Cheater(HDU-1528)
题意与分析 题意是这样的:有\(n\)张牌,然后第一行是Adam的牌,第二行是Eve的牌:每两个字符代表一张牌,第一个字符表示牌的点数,第二个表示牌的花色.Adam和Eve每次从自己的牌中选出一张牌进 ...
随机推荐
- intelli j中如何重启tomcat,或者关掉tomcat?每次点run都提示jmx端口占用
方法1.idea有时候会这样,我一般都是直接打开任务管理器,把java进程给杀掉就好了.
- (转)超级实用且不花哨的js代码大全
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- 旧文备份:硬盘MBR引导记录损坏的一种修复方法
硬盘MBR信息损坏原因:硬盘上安装了windows XP和linux双系统,在windows下安装一套软件,破解的时候修改了硬盘的序列号,结果导致引导系统的grub无法完成linux的引导,只能进到w ...
- 使用classList来实现两个按钮样式的切换
classList属性的方法:add();remove();toggle(); 描述,在一些页面我们需要使用两个按钮来回切换,如图: 我们要使用到add()和remove()方法 html部分: &l ...
- css3中有关transform的问题
Transform属性应用于元素的2D或3D转换.这个属性允许你将元素旋转,缩放,移动,倾斜等.
- libcurl 基本使用
libcurl,在HLS流媒体播放终端上提供HTTP下载的相关接口.具体的使用方式可以参见http://curl.haxx.se/libcurl/c/libcurl-tutorial.html,或博客 ...
- UIImagePickerController获取照片的实现,添加overlay方法 (相机取景框)
DEVELOPER.XIAOYAOLI 技术笔记 简单的利用UIImagePickerController调用iPhone摄像头获取照片的方法,同时介绍了怎么添加overlay,用于自定义预览界面 ...
- Vue组件:组件的动态添加与删除
一.实现效果 二.实现代码 HelloWorld.vue <template> <div class="hello"> <child-page v-f ...
- vue项目苹果微信端使用this.$router.go(-1)返回上一页,上一页并不会重新加载的问题
window.addEventListener('pageshow', function(e) { // 通过persisted属性判断是否存在 BF Cache if (e.persisted) { ...
- android xml实现animation 4种动画效果
animation有四种动画类型 分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML ...