[luoguP3729]曼哈顿计划EX
来自FallDream的博客,未经允许,请勿转载,谢谢。
艾登拥有一个计算机网络,每一台计算机都至少有着Intel Xeon E50 v40 + 40路GTX10800Titan的恐怖配置,并由无线网络直接或间接连接,这可以用一个无向连通图来表示。但是他的计算机网络有一个问题——不够安全,dedsec可能会攻击他的网络,切断一些无线连接,从而导致整个计算机网络不连通。为了避免这种情况,艾登决定从这些计算机中挑出一些计算机作为计算节点,其他计算机作为信息的中转站,进行停止核弹发射进程的任务。虽然台台都是顶配,但是艾登的计算机也会有从山寨厂买回的配件和原装正版配件的差别——每台电脑的工作能力是不同的,记为
。现在艾登想知道,对于一个工作能力的要求,整个网络的安全系数最大是多少?
设给出的图为
,其中
=
(计算节点) +
(中转节点)
我们定义安全系数k为:最大的k,使得任意两点
都至少有k条互不相交的u到v的链(互不相交定义为:没有重复的边,可以重复有重复的点)
- 我们定义整个图的工作能力
、
先建出等价流树/最小割树,然后按照流量排序,从大到小加入带权并查集,更新答案即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define MN 550
#define MM 3000
#define MV 1000000
#define pa pair<int,int>
#define mp(x,y) make_pair(x,y)
#define INF 2000000000
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
} vector<int> v[MN*];
bool in[MN+];
int n,m,Q,cc=,cnt=,tot=,head[MN+],S,T,fa[MN+],d[MN+];
int c[MN+],q[MN+],top,w[MN+],Hd[MN+],Ques[MN+],Ans[MV+],Fa[MN+];
pa p[MN+];
struct edge{int to,next,w,tot;}e[MM*+]; inline void ins(int*H,int f,int t,int w)
{
e[++cnt]=(edge){t,H[f],w,w};H[f]=cnt;
e[++cnt]=(edge){f,H[t],w,w};H[t]=cnt;
} void Get(int x)
{
in[x]=;
for(int i=head[x];i;i=e[i].next)
if(e[i].w&&!in[e[i].to]) Get(e[i].to);
} int dfs(int x,int f)
{
if(x==T) return f;
int used=;
for(int&i=c[x];i;i=e[i].next)
if(e[i].w&&d[e[i].to]==d[x]+)
{
int w=dfs(e[i].to,min(f-used,e[i].w));
used+=w;e[i].w-=w;e[i^].w+=w;
if(used==f) return f;
}
return d[x]=-,used;
} bool bfs()
{
memset(d,,sizeof(d));int i,j;
for(d[q[top=i=]=S]=;i<=top;++i)
for(j=c[q[i]]=head[q[i]];j;j=e[j].next)
if(e[j].w&&!d[e[j].to])
d[q[++top]=e[j].to]=d[q[i]]+;
return d[T];
} void Solve(int x)
{
if(v[x].size()<) return;
S=v[x][],T=v[x][];int ans=;
for(int i=;i<=cnt;++i) e[i].w=e[i].tot;
while(bfs()) ans+=dfs(S,INF);
ins(Hd,S,T,ans);
memset(in,,sizeof(in));Get(S);
for(int i=;i<v[x].size();++i)
v[tot++in[v[x][i]]].push_back(v[x][i]);
int pre=tot;tot+=;Solve(pre+);Solve(pre+);
} void Dfs(int x,int fa)
{
for(int i=Hd[x];i;i=e[i].next)
if(e[i].to!=fa&&e[i].w) Fa[e[i].to]=x,p[++cc]=mp(e[i].w,e[i].to),Dfs(e[i].to,x);
}
inline int getfa(int x){return fa[x]?fa[x]=getfa(fa[x]):x;}
int main()
{
n=read();m=read();Q=read();int mx=;
for(int i=;i<=n;++i) mx=max(mx,w[i]=read()),v[].push_back(i);
for(int i=;i<=m;++i)
{
int x=read(),y=read();
ins(head,x,y,);
}
Solve();Dfs(,);
sort(p+,p+cc+,greater<pa>());
for(int i=;i<=cc;++i)
{
int x=p[i].second,y=getfa(Fa[x]);
fa[x]=y;w[y]+=w[x];
Ans[min(w[y],MV)]=max(Ans[min(MV,w[y])],p[i].first);
}
for(int i=MV;i;--i)
Ans[i]=max(Ans[i],Ans[i+]);
for(int i=;i<=Q;++i)
{
int x=read();
if(x<=mx) puts("nan");
else if(Ans[x]) printf("%d\n",Ans[x]);
else puts("Nuclear launch detected");
}
return ;
}
[luoguP3729]曼哈顿计划EX的更多相关文章
- Luogu P3727 曼哈顿计划E 点分治+hash
题目: P3727曼哈顿计划E 分析: 大长题面容易给人一种不可做的错觉,但是这题考的知识点都是我们熟悉的. 稍加分析我们可以得到,我们可以把每个点当成一个单独的游戏,如果k=1,就是简单的nim游戏 ...
- [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...
- P3727 曼哈顿计划E
点分治+SG函数还真是令人意外的组合啊 思路 这道题看到找一条满足条件的链,想到点分治 看到博弈,想到SG函数 然后就变成一道SG函数+点分治的题了 然后1e9的SG函数怎么搞?当然是打表了 然后各种 ...
- [Luogu3727]曼哈顿计划E
luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...
- LDA( Latent Dirichlet Allocation)主题模型 学习报告
1 问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...
- 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
第三部分 NN-ANN 70年前的逆向推演 从这部分开始,调整一下视角主要学习神经网络算法,将其与生物神经网络进行横向的比较,以窥探一二. 现在基于NN的AI应用几乎是满地都是,效果也不错,这种貌似神 ...
- Monte Carlo方法简介(转载)
Monte Carlo方法简介(转载) 今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...
- 蒙特·卡罗算法的Python实现
一 背景 此算法诞生的背景是: 曼哈顿计划,有极大的计算需求. 计算机刚开始发展,最适合做计算. 蒙特卡洛算法理论基础是概率论,实际就是暴力计算逼近理想结果.正是在以上两个背景下,它刚好得到了极大的应 ...
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
本文是对参考资料中多篇关于sampling的内容进行总结+搬运,方便以后自己翻阅.其实参考资料中的资料写的比我好,大家可以看一下!好东西多分享!PRML的第11章也是sampling,有时间后面写到P ...
随机推荐
- TOTP算法 基于时间的一次性密码
/** Copyright (c) 2011 IETF Trust and the persons identified as authors of the code. All rights rese ...
- BM V7000数据恢复成功案例;服务器数据恢复
IBM V7000存储是一款定位中端的存储设备,很多企业选择该服务器作为存储,最近北亚数据恢复中心接到一例V7000服务器数据恢复案例,下面将对本次数据恢复的过程和数据恢复方法进行归纳总结,希望对各位 ...
- Linux入门:usermod - 修改用户帐户信息
一.什么是usermod? usermod 命令通过修改系统帐户文件来修改用户账户信息usermod [options] user_name选项(options)-a|--append ##把用户追加 ...
- greenplum集群某台机器磁盘占用100%处理方式
一.问题描述 使用gpfdist往集群中导入大量数据, 一段时间后连接退出,集群无法连接 二.问题定位 使用如下命令查看: gpstate -s mdw-:gpadmin-[INFO]:- Segme ...
- 基于哈夫曼编码的文件压缩(c++版)
本博客由Rcchio原创 我了解到很多压缩文件的程序是基于哈夫曼编码来实现的,所以产生了自己用哈夫曼编码写一个压缩软件的想法,经过查阅资料和自己的思考,我用c++语言写出了该程序,并通过这篇文章来记录 ...
- 二、配置QtDesigner、PyUIC及PyRcc
配置QtDesigner.PyUIC及PyRcc 安装完PyQt 5 及PyQt5-tools 后,则需要在Pycharm中配置QtDesigner.PyUIC及PyRcc. 配置QtDesigner ...
- urllib.parse.urlencode
urllib.request.urlopen(url,data,timeout) 其中如果data被赋值,则请求的方式就会由get转为post,而post需要提供一些待处理的数据. 这些待处理的数据需 ...
- django实现model中choices类型字段,后台自由配置
该功能主要试用于项目中有大量需要动态配置的字典字段,字典建议做缓存处理. 定义字典类型表,字典值两张表 2.配置对应的字典值 3.重写model的init方法,动态赋值choice 4.列表界面效果 ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- win7下ubuntu14.4双系统安装
参考https://jingyan.baidu.com/article/f71d60379824041ab641d19d.html