来自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的更多相关文章

  1. Luogu P3727 曼哈顿计划E 点分治+hash

    题目: P3727曼哈顿计划E 分析: 大长题面容易给人一种不可做的错觉,但是这题考的知识点都是我们熟悉的. 稍加分析我们可以得到,我们可以把每个点当成一个单独的游戏,如果k=1,就是简单的nim游戏 ...

  2. [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)

    题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...

  3. P3727 曼哈顿计划E

    点分治+SG函数还真是令人意外的组合啊 思路 这道题看到找一条满足条件的链,想到点分治 看到博弈,想到SG函数 然后就变成一道SG函数+点分治的题了 然后1e9的SG函数怎么搞?当然是打表了 然后各种 ...

  4. [Luogu3727]曼哈顿计划E

    luogu 题意(简化版) 给你一棵树,每个点上有一个\(SG\)值,问你是否存在一条路径使得\(SG\)异或和为\(0\). sol 可以当做每个点的稳定值就是这个点上的石子数量. 很显然我们只需要 ...

  5. LDA( Latent Dirichlet Allocation)主题模型 学习报告

    1     问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...

  6. 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN

    第三部分 NN-ANN 70年前的逆向推演 从这部分开始,调整一下视角主要学习神经网络算法,将其与生物神经网络进行横向的比较,以窥探一二. 现在基于NN的AI应用几乎是满地都是,效果也不错,这种貌似神 ...

  7. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

  8. 蒙特·卡罗算法的Python实现

    一 背景 此算法诞生的背景是: 曼哈顿计划,有极大的计算需求. 计算机刚开始发展,最适合做计算. 蒙特卡洛算法理论基础是概率论,实际就是暴力计算逼近理想结果.正是在以上两个背景下,它刚好得到了极大的应 ...

  9. 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)

    本文是对参考资料中多篇关于sampling的内容进行总结+搬运,方便以后自己翻阅.其实参考资料中的资料写的比我好,大家可以看一下!好东西多分享!PRML的第11章也是sampling,有时间后面写到P ...

随机推荐

  1. python 之反射

    通过字符串的形式导入模块 通过字符串的形式,去模块中寻找制定的函数,并执行getattr(模块名,函数名,默认值) 通过字符串的形式,去模块中设置东西setattr(模块名,函数名/变量名,lambd ...

  2. 【iOS】swift 排序Sort函数用法(包含NSDictionary排序)

    用了几分钟做的简单翻译 一个例子 直接贴代码,不过多解释 //这是我们的model class imageFile { var fileName = String() var fileID = Int ...

  3. centos7 编译安装greenplum5.7

    一.配置系统 安装是以一个主节点,三个子节点进行安装.gp是在github上下载的5.7的源码.地址https://github.com/greenplum-db/gpdb/tree/5.7.0. 1 ...

  4. (干货)微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  5. JavaScript 原型中的哲学思想

    学习JavaScript过程中,原型问题一直让我疑惑许久,那时候捧着那本著名的红皮书,看到有关原型的讲解时,总是心存疑虑.当在JavaScript世界中走过不少旅程之后,再次萌发起研究这部分知识的欲望 ...

  6. redis入门(04)redis的数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.String(字符串) ...

  7. 阿里云API网关(9)常见问题

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  8. SpringCloud的服务网关zuul

    演示如何使用api网关屏蔽各服务来源 一.概念和定义 1.zuul最终还是使用Ribbon的,顺便测试一下Hystrix断路保护2.zuul也是一个EurekaClient,访问服务注册中心,获取元数 ...

  9. 喜马拉雅音频下载工具 - xmlyfetcher

    xmlyfetcher用于下载喜马拉雅歌曲资源,可以下载单个音频资源,也可以下载整个专辑. 项目地址:https://github.com/smallmuou/xmlyfetcher 安装 安装jsh ...

  10. Linux安装git和maven的详细过程

    一.使用yum安装git 当前安装环境是centos6.5 由于在CentOS6的yum源中已经有git的版本了,可以直接使用yum源进行安装 yum -y install git 由于centos6 ...