[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] ...
随机推荐
- 724. Find Pivot Index
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- AO之Addins开发[杂谈1] Toolbar中添加一条分割线
在XML代码中,给Item添加separator属性,需要从哪里打分割线,就将其设置为true即可.如下图所示: 如紫色框住的灰色竖线所示. 默认separator属性是false的,这个小东西极其隐 ...
- Java中list<Object[]>、list<Student>、list<Map<String,String>>排序
1:list<Object[]>的排序 public static void main(String[] args) { // TODO Auto-generated method s ...
- Oracle数据库中插入日期型数据(to_date的用法)(转载)
往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ...
- jmeter远程分布执行遇到的网卡坑(A Test is currently running,stop or ....)
周末加班做一个项目app的性能测试,单机负载时由于公司给每个人的网络带宽上传下载流量就1M,300个用户并发就已经网络IO饱和了,虽然和相关部门协调过资源问题,但是收效甚微,因此打算先用分布部署压力机 ...
- jingtai ip
BOOTPROTO=staticONBOOT=yesIPADDR=192.168.1.109NETMASK=255.255.255.0GATEWAY=192.168.1.1 HWADDR=00:e0: ...
- 为clang添加中文关键字
原址: https://zhuanlan.zhihu.com/p/31158537 以clang为基础做了一个与C++.C兼容中英文关键字的编译器 swizl/cnlang 原理就是加与英文关键字等效 ...
- Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 面试经验And总结
作为一个实习生,我大二即将读完,因为自己是大专的和本科没法比,没有他们的 知识基础,没有他们的充裕的时间,没有那个本科毕业证,没有学位证书.作为一个大专生我在找工作的时候总是充满了自卑,可自己有事那种 ...
- 解决myeclipse部署按钮不能点
找到MyEclipse的工作路径(一般点开myeclipse是会显示),然后到这个目录中去“\.metadata\.plugins\org.eclipse.core.runtime\.settings ...