[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 ...
随机推荐
- Ubuntu下tomcat或eclipse启动提示没有java环境问题
tomcat和eclipse默认使用了openjdk,通过压缩包安装的jdk无法被识别,通过修改tomcat/bin下的catalina.sh添加jdk和jre路径即可 sudo gedit cata ...
- 服务器磁盘阵列数据恢复,raid5两块硬盘掉线数据恢复方法
[用户单位信息] 农业科学研究院某研究所 [磁盘阵列故障发生过程描述]客户的DELL MD1000服务器内置15块1TB硬盘搭建为RAID5磁盘阵列阵列,服务器在正常工作中有一块硬盘离线,管理员对磁盘 ...
- 一个页面多个HTTP请求 页面卡顿!
用promise解决 前两天面试的时候 一个面试官问到这样一个问题 这里先说出解决的路径 这几天会更新具体的做法 或者直接参考廖雪峰大神 地址如下: https://www.liaoxuefeng.c ...
- 关于 Ubuntu Linux 16.04中文版的 root 权限及桌面登录问题
新接触 Ubuntu 的朋友大多会因为安装中没有提示设置 root 密码而不太清楚是什么原因. 起初 Ubuntu 团队希望安装尽可能的简单. 不使用 root , 在安装期间的两个用户交互步骤可以省 ...
- gdb-peda调试总汇
gdb-peda调试总汇 break *0x400100 (b main):在 0x400100 处下断点 tb一次性断点 info b:查看断点信息 delete [number]:删除断点 wat ...
- jQuery serialize()方法获取不到数据,alert结果为空
网上查找,问题可能是 id有重复 经排查,没有发现重复id 解决方案 form表单中每个input框都没有name属性,添加name属性即可 若name属性与jQuery的关键字有冲突,也可导致该问题 ...
- Linux系统的基本使用
曾经在网上看到一个一篇文章,说到了Linux学习的入门与学习技巧,也就是:初学者可以自己安装虚拟机,然后把linux常用命令例如cd.ls.chmod.useradd.vi等等多练习几十遍,把自己敲打 ...
- python基础——多态与多态性
python基础--多态与多态性 1 多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. 2. 动物有多种形态:人, ...
- A、B同时打开一个页面进行同一条数据库记录进行修改,A修改完成后提交表单,A修改的数据保存完成后;当B也修改完成后,提交数据进行数据修改。此时B修改的内容会覆盖A修改的内容,请问如何避免?
A.B同时打开一个页面进行数据中的一条数据进行修改,A修改完成后提交表单,数据修改保存完成后B开始页面也修改完成,开始提交进行修改.此时B修改的内容会覆盖A的内容,请问如何避免? 通过搜索和我个人总结 ...
- SpringMVC(二):RequestMapping修饰类、指定请求方式、请求参数或请求头、支持Ant路径
@RequestMapping用来映射请求:RequestMapping可以修饰方法外,还可以修饰类 1)SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求: 2 ...