[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] ...
随机推荐
- asp.net mvc 下拉列表
第一步:新建一个格式化下拉列表的公共类文件 using System; using System.Collections; using System.Collections.Generic; usin ...
- Kafka+Storm写入Hbase和HDFS
1.Storm整合Kafka 使用Kafka作为数据源,起到缓冲的作用 // 配置Kafka订阅的Topic,以及zookeeper中数据节点目录和名字 String zks = KafkaPrope ...
- go实例之轻量级线程goroutine、通道channel与select
1.goroutine线程 goroutine是一个轻量级的执行线程.假设有一个函数调用f(s),要在goroutine中调用此函数,请使用go f(s). 这个新的goroutine将与调用同时执行 ...
- [置顶]
bootstrap自定义样式-bootstrap侧边导航栏的实现
前言 bootstrap自带的响应式导航栏是向下滑动的,有时满足不了个性化的需求,需要做一个类似于android drawerLayout 侧滑的菜单,这就是我要实现的bootstrap自定义侧滑菜单 ...
- seo我告诉你
seo我告诉你,这回seo真的告诉你百度云链接 链接:http://pan.baidu.com/s/1qYpM9y8 密码:mad6 seo优化教程:
- Angularjs 2 绝对零基础的教程(1):从安装配置开始
写在前面 适合人群: 1. 愿意未来从事前端工作,并以此开拓自己未来职业 2. 有任何一种编程语言基础 3. 喜欢简单粗暴学一门实用的技术,而不是做科研. Angular 2 比 Angular 1 ...
- jquery图片延迟加载 及 serializeArray、serialize用法记录
1.使用jquery实现 图片延迟加载 由于用户访问页面需要加载很多的图片,延迟加载技术在电子商务网站领域越来越普及,淘宝商城,京东商城,凡客等访问量巨大的电子商务站点为了增加用户用户体验,访问速度以 ...
- linux shadowsocket 安装和启动
http://blog.csdn.net/hanshileiai/article/details/49302865
- 7、正确的赚钱方式 - CEO之公司管理经验谈
创业者创办公司,最初的目的就是为了赚钱,而普通的员工来公司上班,为了生计,也是以赚钱为目的.今天我们就讲讲正确的赚钱方式. 一.去公司上班: 来公司上班是第一个主要的赚钱方式.不管是员工还是公司领导, ...
- 房上的猫:java中的包
包 1.作用: (1)包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件 (2)防止命名冲突: java中只有在不同包中的类才能重名 (3)包允许在更广的范围内保护类,数 ...