[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] ...
随机推荐
- 解决IOS iframe不滚动问题
.frameBox{ position: fixed; top: 0; left: 0; right: 0; bottom: 0; -webkit-overflow-scrolling: touch; ...
- iOS 通过UIControl,自定义控件
如:自定义一个可以点击的 图文 #import <UIKit/UIKit.h> @interface UD_Button : UIControl @property(nonatomic,s ...
- Python学习日记:day5-------dict字典
#字典dict------->唯一的映射类型 1.数据类型的划分 数据类型划分为可变数据类型和不可变数据类型. 不可变数据类型:tupe(元组).bool.int.str 可 ...
- java 设计模式-缺省适配器模式
本文转载地址:http://www.cnblogs.com/iyangyuan/archive/2013/03/11/2954808.html 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个 ...
- 优化css选择器
1.css选择器效率排行从高到低如下: id选择器(#head) 类选择器(.content) 标签选择器(p,h1) 相邻选择器(h1+p) 子选择器(ul < li)
- sudo 做不到的事
本文是经验帖,以后遇到类似的情况会持续更新到这篇文章 普通用户使用sudo会遇到以下情况 1.字符流无法写入到 /var/log/messages /var/log/secure (实际上这些文件一旦 ...
- Java自己动手写连接池一
自己动手写连接池,废话不多说,直接上代码,读取配置文件 package com.kama.cn; import java.io.IOException;import java.io.InputStre ...
- getComputedStyle与currentStyle获取样式(style/class)
今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式. 因为elem.style.width只能获取elem的style属性里的样式,无 ...
- golang 用tar打包文件或文件夹
打包文件用到了tar包,其中tar包的用法可以参考API golang提供了个函数用来遍历文件夹 filepath.Walk 函数具体描述如下: func Walk(root string, walk ...
- Python玩转硬件:TPYBoard-Micropython开发板大盘点
学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...