首先最短路长度不同的人肯定不会冲突。

  对于最短路长度相同的人,跑个最大流就行了。。当然只有一个人就不用跑了

  看起来会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的更多相关文章

  1. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

  2. BZOJ 3955 Surely You Congest 解题报告

    首先,我们可以求出源为 $1$ 号点的最短路图以及各个点到 $1$ 号点的最短路. 然后我们考虑那些距离不同的点,是一定不会发生拥堵现象的. 然后我们就只需要考虑那些距离相同的点,就相当于做一个最大流 ...

  3. Gym - 101208C 2013 ACM-ICPC World Finals C.Surely You Congest 最大流+最短路

    题面 题意:给你n(2w5)个点,m条边(7w5)有k(1e3)辆车停在某些点上的,然后他们都想尽快去1号点,同时出发,同一个点不允许同时经过, 如果多辆车同时到达一个点,他们就会堵塞,这时候只能选择 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. ACM International Collegiate Programming Contest World Finals 2013

    ACM International Collegiate Programming Contest World Finals 2013 A - Self-Assembly 题目描述:给出\(n\)个正方 ...

  6. BZOJ_3969_[WF2013]Low Power_二分答案

    BZOJ_3969_[WF2013]Low Power_二分答案 Description 有n个机器,每个机器有2个芯片,每个芯片可以放k个电池. 每个芯片能量是k个电池的能量的最小值. 两个芯片的能 ...

  7. bzoj 3969: [WF2013]Low Power 二分

    3969: [WF2013]Low Power Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  8. 设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   ...

  9. BZOJ3971 [WF2013]Матрёшка

    *XXXIV. BZOJ3971 [WF2013]Матрёшка 摘自 DP 做题记录 II 例题 XXXIV. 仍然是神仙区间 DP. 直接设状态 \(f_{i,j}\) 表示区间 \([i,j] ...

随机推荐

  1. JavaWeb之Java Servlet完全教程(转)

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

  2. js计算字数

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. 学习 Kubernetes 的 Why 和 How - 每天5分钟玩转 Docker 容器技术(114)

    这是一个系统学习 Kubernetes 的教程,有下面两个特点: 系统讲解当前最流行的容器编排引擎 Kubernetes包括了安装部署.应用管理.网络.存储.监控.日志管理等多各个方面. 重实践并兼顾 ...

  4. C#序列化总结

    贴一下自己序列化的代码: public class XMLUtil { /// <summary> /// XML & Datacontract Serialize & D ...

  5. sql经典试题

    1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...

  6. ADG监控

    cx_Oracle环境配置 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 ...

  7. Hello TensorFlow 三 (Golang)

    在一台ubuntu 16.04.2虚拟机上为golang安装TensorFlow. 官方参考:https://www.tensorflow.org/install/install_go 首先安装go ...

  8. K:java中的序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...

  9. timeline时间轴进度“群英荟萃”

    timeline时间轴进度“群英荟萃”  是日,无论PC项目还是APP,都涉及到了通常称谓的“时间轴”UI展现布局.产品和设计师都喜欢横向.纵向的时间轴来传达产品的寓意.如此,如斯!总结一套 time ...

  10. 再见乱码:5分钟读懂MySQL字符集设置

    一.内容概述 在MySQL的使用过程中,了解字符集.字符序的概念,以及不同设置对数据存储.比较的影响非常重要.不少同学在日常工作中遇到的"乱码"问题,很有可能就是因为对字符集与字符 ...