来自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. 微信公众号Markdown编辑器, 适合代码排版

    随着大家都转战微信公众平台,如何快速的编写文章就摆在了首要位置.不可否认,使用微信自带的编辑器可以做出好看的排版,甚至用第三方编辑器有更多的模板.但是,这些全部都需要手动的调整.本来公众平台就算是自媒 ...

  2. EasyUi中对话框。

    html页面代码: <head id="Head1" runat="server"> <meta http-equiv="Conte ...

  3. pythoncharm 中解决启动server时出现 “django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configured”的错误

    背景介绍 最近,尝试着用pythoncharm 这个All-star IDE来搞一搞Django,于是乎,下载专业版,PJ等等一系列操作之后,终于得偿所愿.可以开工了. 错误 在园子里找了一篇初学者的 ...

  4. 前端基础之CSS-Day13

    1.CSS 语法 1.1.CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector { property: value; property: value; ... proper ...

  5. 新概念英语(1-39)Don't drop it!

    新概念英语(1-39)Don't drop it! Where does Sam put the vase in the end ? A:What are you going to do with t ...

  6. Spring Security 入门(1-5)Spring Security - 匿名认证

    匿名认证 对于匿名访问的用户,Spring Security 支持为其建立一个匿名的 AnonymousAuthenticationToken 存放在 SecurityContextHolder 中, ...

  7. 解决cors跨域的filter

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; im ...

  8. javascript学习总结一

    1. 变量提升hoisting 变量提升的意思是在一个变量作用域里定义的变量的声明会被提升到作用域的顶部,这是变量只会被声明,不会被初始化复制,而是undefined. 代码如下: function ...

  9. html标记语言 --图像标记

    html标记语言 --图像标记 三.图像标记 1.使用方法 <img src="路径/文件名.格式" width="属性值" height="属 ...

  10. jacascript DOM节点——节点获取与选择器API

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! DOM 操作必须等待 HTML 加载完毕之后,才可以获取节点:有两种方法: 把 script 标签放到代码 ...