bzoj4331: JSOI2012 越狱老虎桥
Description
Input
Output
#include<cstdio>
#define G *++ptr
const int N=,inf=0x3f3f3f3f;
char buf[N*],*ptr=buf-;
int _(){
int x=,c=G;
while(c<)c=G;
while(c>)x=x*+c-,c=G;
return x;
}
bool ei[N*];
int n,m,es[N*],enx[N*],ev[N*],e0[N],e1[N],ep=,id[N],idp;
void ae(int*e,int a,int b,int c){
es[ep]=b;enx[ep]=e[a];ev[ep]=c;e[a]=ep++;
es[ep]=a;enx[ep]=e[b];ev[ep]=c;e[b]=ep++;
}
int dfn[N],low[N],tk=;
void mins(int&a,int b){if(a>b)a=b;}
void maxs(int&a,int b){if(a<b)a=b;}
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a>b?a:b;}
void tj(int w){
dfn[w]=low[w]=++tk;
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
if(!u)continue;
if(!dfn[u]){
es[i^]=;
tj(u);
es[i^]=w;
mins(low[w],low[u]);
if(low[u]>dfn[w])ei[i>>]=;
}else mins(low[w],dfn[u]);
}
}
void f1(int w){
id[w]=idp;
dfn[w]=;
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
if(!ei[i>>]&&dfn[u])f1(u);
}
}
int v0[N],v02[N],v1[N],v2[N],vu[N],v,ans=;
void f2(int w,int pa){
v0[w]=v02[w]=v1[w]=v2[w]=vu[w]=inf;
for(int i=e1[w];i;i=enx[i]){
int u=es[i];
if(u==pa)continue;
f2(u,w);
v=min(v0[u],ev[i]);
v2[w]=max(min(v2[w],v),min(v1[w],v1[u]));
v1[w]=max(min(v1[w],v),min(v0[w],v1[u]));
if(v<=v0[w])v02[w]=v0[w],v0[w]=v;
else mins(v02[w],v);
}
}
void f3(int w,int pa){
v=min(vu[w],v2[w]);
maxs(ans,v);
for(int i=e1[w];i;i=enx[i]){
int u=es[i];
if(u==pa)continue;
vu[u]=min(min(ev[i],vu[w]),min(v0[u],ev[i])==v0[w]?v02[w]:v0[w]);
f3(u,w);
}
}
int main(){
fread(buf,,sizeof(buf),stdin)[buf]=;
n=_();m=_();
for(int i=,a,b,c;i<m;++i){
a=_();b=_();c=_();
if(a==b)continue;
ae(e0,a,b,c);
}
tj();for(int i=;i<=n;++i)if(dfn[i]){
++idp;
f1(i);
}
for(int i=;i<ep;i+=)if(ei[i>>])ae(e1,id[es[i]],id[es[i^]],ev[i]);
f2(,);
f3(,);
if(ans==inf)ans=-;
printf("%d",ans);
return ;
}
bzoj4331: JSOI2012 越狱老虎桥的更多相关文章
- 【BZOJ4331】[JSOI2012]越狱老虎桥(Tarjan)
[BZOJ4331][JSOI2012]越狱老虎桥(Tarjan) 题面 BZOJ 然而BZOJ是权限题QwQ 洛谷 题解 先求出所有割边,那么显然要割掉一条割边. 如果要加入一条边,那么显然是把若干 ...
- luogu P5234 [JSOI2012]越狱老虎桥
传送门 题目要求割掉一条边后使得图不连通,那么可以使用tarjan算法求出所有的割边,然后把边双缩成点,就能得到一棵树,现在问题是在加入一条边的情况下,割掉最小的一条边使得图不连通,割掉的这条边权值最 ...
- 洛谷P5234 越狱老虎桥 [JSOI2012] tarjan
正解:tarjan+贪心(?并不会总结是什么方法QAQ,,, 解题报告: 传送门! 这题是真的题意杀,,,我我我要不是之前知道题目大意了我怕是怎么看都看不懂这是个什么意思昂QAQ 所以先说下题目大意好 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 越狱Season 1-Episode 19: The Key
Season 1, Episode 19: The Key -Kellerman: WeusedtohaveaGreatDane, Dane: 丹麦大狗 我们以前有一只大丹犬 bigandwild. ...
- [Swust OJ 567]--老虎在不在笼子里(凸包问题)
题目链接:http://acm.swust.edu.cn/problem/567/ Time limit(ms): 1000 Memory limit(kb): 65535 一只老虎自从看了< ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- 【转】 iOS9.2-iOS9.3.3越狱插件清单
以下是iOS9.3.3越狱插件清单 原文地址:http://bbs.feng.com/read-htm-tid-10668605.html 序列 支持与否 插件名称 兼容版本 支持设备 1 是 20 ...
- hub,桥,交换机,路由器的区别
1.四种设备在网络中的物理位置 如下图 2.这四种设备的本质 这四种设备,不管怎样,他们都是进行包的转发,只不过转发的行为有些不一样而已 3.逐一介绍 对于hub,一个包过来后,直接将包转发到其他口. ...
随机推荐
- Kali2018.1
目录 制作U盘启动盘 安装 Kali Linux 之后的事 更新源 配置 Zsh 配置 Vim 修改 Firefox 语言为中文 安装 Gnome 扩展 美化 安装 Google 拼音输入法 安装常用 ...
- nodejs真的是单线程吗?
[原文] 一.多线程与单线程 像java.python这个可以具有多线程的语言.多线程同步模式是这样的,将cpu分成几个线程,每个线程同步运行. 而node.js采用单线程异步非阻塞模式,也就是说每一 ...
- JAVA基础之复识一
JAVA不单是一门计算机编程语言,而且还是一种基于WEB的全方位软件开发技术, java特定运行平台及关键特点 java开发工具包的安装,配置与应用 java语言的基本概念 java面向对象编程 ja ...
- poj 2828 Buy Tickets 树状数组
Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in China, so ...
- codeforces 356 div2 C.Bear and Prime 100 数学
C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input standar ...
- JSP 语法
JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代 ...
- KMP与AC自动机
KMP算法主要思想就是预处理出失配函数, 从而减少匹配失败时的回溯, 复杂度是$\Theta(m+n)$, 已达到理论下界 c++代码如下 int n, f[N]; char t[N], p[N]; ...
- 牛客网——G大水题
链接:https://www.nowcoder.net/acm/contest/75/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 049——VUE中使用animation与transform实现vue的动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js 数据函数
//shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...