[bzoj3955] [WF2013]Surely You Congest
首先最短路长度不同的人肯定不会冲突。
对于最短路长度相同的人,跑个最大流就行了。。当然只有一个人就不用跑了
看起来会T得很惨。。但dinic在单位网络里是O(m*n^0.5)的...
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=,inf=;
struct zs2{
int too,pre,dis;
}e1[];int tot1,last1[maxn];
struct zs1{int dis,id;};
priority_queue<zs1>q;
bool u[maxn];
int dis1[maxn];
struct zs{
int too,pre;bool flow;
}e[];int tot,last[maxn];
int dl[maxn];
short dis[maxn];
int pos[];
int i,j,k,n,m,ans,s,t,tt,c; int ra;char rx;
inline int read(){
rx=getchar(),ra=;
while(rx<''||rx>'')rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra;
} bool operator <(zs1 a,zs1 b){return a.dis>b.dis;}
inline void spfa(){
int i,now;
memset(dis1,,(n+)<<),dis1[]=,q.push((zs1){,});
while(!q.empty()){
while(!q.empty()&&u[q.top().id])q.pop();
if(q.empty())return;
now=q.top().id,q.pop(),
u[now]=;
for(i=last1[now];i;i=e1[i].pre)if(dis1[e1[i].too]>dis1[now]+e1[i].dis)
dis1[e1[i].too]=dis1[now]+e1[i].dis,q.push((zs1){dis1[e1[i].too],e1[i].too});
}
}
inline void insert1(int a,int b,int c){
e1[++tot1].too=b,e1[tot1].dis=c,e1[tot1].pre=last1[a],last1[a]=tot1,
e1[++tot1].too=a,e1[tot1].dis=c,e1[tot1].pre=last1[b],last1[b]=tot1;
}
bool bfs(){
memset(dis,,(n+)<<);
int l=,r=,i,now;dl[]=s,dis[s]=;
while(l<r&&!dis[t])
for(i=last[now=dl[++l]];i;i=e[i].pre)if(e[i].flow&&!dis[e[i].too])
dis[e[i].too]=dis[now]+,dl[++r]=e[i].too;
// for(i=1;i<=n;i++)printf("0->%d %d\n",i,dis[i]);
return dis[t];
}
int dfs(int x,int mx){
if(x==t)return mx;
int used=,i;bool w;
for(i=last[x];i;i=e[i].pre)if(e[i].flow&&dis[e[i].too]==dis[x]+){
w=dfs(e[i].too,);if(w){
e[i].flow=,e[i^].flow=,used++;
if(used==mx)return mx;
}
}
dis[x]=;return used;
}
inline void insert(int a,int b,int c){//printf(" %d-->%d %d\n",a,b,c);
e[++tot].too=b,e[tot].flow=c,e[tot].pre=last[a],last[a]=tot;
e[++tot].too=a,e[tot].flow=,e[tot].pre=last[b],last[b]=tot;
}
inline int check(int L,int R){//printf("check: %d--%d\n",L,R);
register int i;int flow=,j;
for(i=;i<=tt;i+=)e[i].flow=,e[i^].flow=;
for(j=;i<=tot;i+=,j++)
e[i].flow=j>=L&&j<=R,e[i^].flow=;
while(bfs())flow+=dfs(s,inf);
// printf("flow: %d\n",flow);
return flow;
}
bool cmp(int a,int b){return dis1[a]<dis1[b];}
int main(){
n=read(),m=read(),c=read();
for(i=;i<=m;i++)j=read(),k=read(),insert1(j,k,read());
for(i=;i<=c;i++)pos[i]=read();
spfa();
// for(i=1;i<=n;i++)printf("1-->%d %d\n",i,dis1[i]);
s=,t=,tot=;
for(i=;i<=n;i++)for(j=last1[i];j;j=e1[j].pre)
if(dis1[e1[j].too]==dis1[i]+e1[j].dis)insert(e1[j].too,i,);tt=tot;
sort(pos+,pos++c,cmp); for(i=;i<=c;i++)insert(s,pos[i],);
int pre;
for(i=;i<=c&&pos[i]==;i++,ans++);
for(pre=i;i<=c;i++)if(dis1[pos[i]]!=dis1[pos[i+]]||i==c){
if(pre==i)ans++;else ans+=check(pre,i);
pre=i+;
}
printf("%d\n",ans);
return ;
}
dinic好优越啊...
[bzoj3955] [WF2013]Surely You Congest的更多相关文章
- ACM - ICPC World Finals 2013 C Surely You Congest
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...
- BZOJ 3955 Surely You Congest 解题报告
首先,我们可以求出源为 $1$ 号点的最短路图以及各个点到 $1$ 号点的最短路. 然后我们考虑那些距离不同的点,是一定不会发生拥堵现象的. 然后我们就只需要考虑那些距离相同的点,就相当于做一个最大流 ...
- Gym - 101208C 2013 ACM-ICPC World Finals C.Surely You Congest 最大流+最短路
题面 题意:给你n(2w5)个点,m条边(7w5)有k(1e3)辆车停在某些点上的,然后他们都想尽快去1号点,同时出发,同一个点不允许同时经过, 如果多辆车同时到达一个点,他们就会堵塞,这时候只能选择 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- ACM International Collegiate Programming Contest World Finals 2013
ACM International Collegiate Programming Contest World Finals 2013 A - Self-Assembly 题目描述:给出\(n\)个正方 ...
- BZOJ_3969_[WF2013]Low Power_二分答案
BZOJ_3969_[WF2013]Low Power_二分答案 Description 有n个机器,每个机器有2个芯片,每个芯片可以放k个电池. 每个芯片能量是k个电池的能量的最小值. 两个芯片的能 ...
- bzoj 3969: [WF2013]Low Power 二分
3969: [WF2013]Low Power Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
- 设x,y是概率空间(Ω,F,P)上的拟可积随机变量,证明:X=Y a.e 当且仅当 xdp = ydp 对每个A∈F成立。Q: X=Y almost surely iff ∀A∈G∫AXdP=∫AYdP
E{XE{Y|C}}=E{YE{X|C}} 现在有没有适合大学生用的搜题软件呢? https://www.zhihu.com/question/51935291/answer/514312093 ...
- BZOJ3971 [WF2013]Матрёшка
*XXXIV. BZOJ3971 [WF2013]Матрёшка 摘自 DP 做题记录 II 例题 XXXIV. 仍然是神仙区间 DP. 直接设状态 \(f_{i,j}\) 表示区间 \([i,j] ...
随机推荐
- scrollTop的兼容性
各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 : 对于有docty ...
- Linux 学习记录 一(安装、基本文件操作).
Linux distributions主要分为两大系统,一种是RPM方式安装软件的系统,包括Red Hat,Fedora,SuSE等都是这类:一种则是使用Debian的dpkg方式安装软件的 ...
- arcgis api for js热力图优化篇-不依赖地图服务
前面我写过一篇文章,介绍如何实现arcgis api的热力图效果,但是依赖arcgis server发布的地图服务来获取热力图的数据源.实际应用中,很多业务数据来源数据库,并不一定是从地图服务来获取的 ...
- 模板引擎(smarty)知识点总结II
今天咱们继续来学习smarty!!! 知识点1:对于三种变量 常量的引用 有哪三种变量?a.assign赋值 b.系统保留变量(包括:$smarty.get,$smarty.post,$smarty. ...
- JavaScript构造函数、继承的理解
前两天稍微深入一点点理解了原型和原型链,然后就开始有挺多疑问的: function dog() { this.name = "huahua"; } var cat = new do ...
- Paho -物联网 MQTT C Cient的实现和详解
概述 在文章Paho - MQTT C Cient的实现中,我介绍了如何使用Paho开源项目创建MQTTClient_pulish客户端.但只是简单的介绍了使用方法,而且客户端的结果与之前介绍的并 ...
- 例子:web版坦克大战1.0
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#用DataTable实现Group by数据统计
http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1.用两层循环计算,前提条件是数据已经按分组的列排好序的. Dat ...
- Vuex 源码学习(二)
Vue加载后,将Vuex 加载到 Vue对象上后,初始化Store. (一) Store的参数的定义 其中 action 与 mutation 的订阅者 用 数组存储,而其属性都是用对象存储的. 考虑 ...
- ES6 modules 详解
概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的require.Pytho ...