题面

题意:给你n(2w5)个点,m条边(7w5)有k(1e3)辆车停在某些点上的,然后他们都想尽快去1号点,同时出发,同一个点不允许同时经过,

如果多辆车同时到达一个点,他们就会堵塞,这时候只能选择通过一辆车,其他车相当于就地爆炸

问最后能有多少车到1号点

题解:想象如果2辆车的最短路不相交,那么他们就互相之间没有了影响,再想象对于一般的图,如何控制度数的,显然有一个网络流的做法

可以走的边就连,度数为1,现在我们考虑每部分最短路长度相等的点集才会受到影响.如果2个点到1的最短路长度一样,那么他们才

可能会经过同一个点,于是针对每一堆最短路一样的,单独建图,累加他们的和就是答案.

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define lld long long
using namespace std;
#define N 30007
#define M 100007
#define inf 100000000000000LL
namespace Dinic
{
int head[N],head2[N],p=;
struct Rec
{
int go,nex;
lld c;
}eg[M*],e[M*];
void build(int a,int b,lld c)
{
//printf("%d %d %d\n",a,b,c);
eg[++p]=(Rec){b,head[a],-c};
head[a]=p;
eg[++p]=(Rec){a,head[b],};
head[b]=p;
}
lld dis[N],ans;
int Q[N],s[N],S,T,stop;
bool bfs()
{
memset(dis,,sizeof(dis));
dis[T]=;
Q[]=T;
for (int p1=,p2=;p1<=p2;p1++)
{
for (int i=head[Q[p1]];i;i=eg[i].nex)
if (eg[i^].c<&&!dis[eg[i].go])
{
dis[eg[i].go]=dis[Q[p1]]+;
Q[++p2]=eg[i].go;
}
}
if (!dis[S]) return false;
memcpy(head2,head,sizeof(head));
return true;
}
bool dinic(int p,int top)
{
if (p==T)
{
lld x=inf;
for (int i=;i<=top-;i++) if (-eg[s[i]].c<x) x=-eg[s[i]].c,stop=i;
for (int i=;i<=top-;i++) eg[s[i]].c+=x,eg[s[i]^].c-=x;
ans+=x;
return true;
}
for (int &i=head2[p];i;i=eg[i].nex)
{
if (eg[i].c<&&dis[eg[i].go]==dis[p]-)
{
s[top]=i;
if (dinic(eg[i].go,top+)&&top!=stop) return true;
}
}
return false;
}
lld ask()
{
ans=;
while (bfs()) dinic(S,);
return ans;
}
void init(int _S,int _T){
S=_S,T=_T;
}
}
using namespace Dinic;
void clear()
{
p=;
memset(head,,sizeof(head));
}
int n,m,ss,tt,why=;
long long diss[N];
void addedge(int a,int b,lld c)
{
p++;
e[p].go=b;
e[p].c=c;
e[p].nex=head[a];
head[a]=p;
}
void dijkstra()
{
priority_queue<pa,vector<pa>,greater<pa> >q;
for (int i=;i<=n;i++) diss[i]=inf;
diss[]=;
q.push(make_pair(,));
while (!q.empty())
{
int now=q.top().second;
q.pop();
for (int i=head[now];i;i=e[i].nex)
if(diss[now]+e[i].c<diss[e[i].go])
{
diss[e[i].go]=diss[now]+e[i].c;
q.push(make_pair(diss[e[i].go],e[i].go));
}
}
}
int u[M],v[M],w[M],pos[M],c;
void solve(int l, int r)
{
clear();
ss=n+;
tt=n+;
init(ss,tt);
for(int i = ; i <= m; i++) build(u[i], v[i], );
for(int i = l; i <= r; i++) build(pos[i], tt, );
build(ss, , r - l + );
why += ask();
//cout << ans <<endl;
}
bool cmp_(int a, int b) {
return diss[a] < diss[b];
}
int main()
{
scanf("%d%d%d", &n, &m, &c);
p=;
for(int i = ; i <= m; i++) scanf("%d%d%d", &u[i], &v[i], &w[i]);
for(int i = ; i <= c; i++) scanf("%d", &pos[i]);
for(int i = ; i <= m; i++) addedge(u[i], v[i], w[i]), addedge(v[i], u[i], w[i]);
dijkstra();
//for (int i=1;i<=n;i++) printf("%d\n",diss[i]);
int tmp = ;
for(int i = ; i <= m; i++) {
if(diss[u[i]] > diss[v[i]]) swap(u[i], v[i]);
if(diss[v[i]] == diss[u[i]] + w[i]) {
++tmp;
swap(u[i], u[tmp]);
swap(v[i], v[tmp]);
swap(w[i], w[tmp]);
}
}
m = tmp;
sort(pos + , pos + c + , cmp_);
for(int i = , j; i <= c; i = j) {
j = i;
while(diss[pos[i]] == diss[pos[j]] && j <= c) j++;
if (diss[pos[i]]==inf) break;
solve(i, j - );
//cout << i << " " << j - 1 <<endl;
}
printf("%d", why);
return ;
}

Gym - 101208C 2013 ACM-ICPC World Finals C.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. hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...

  3. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...

  4. hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...

  5. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  6. hduoj 4706 Herding 2013 ACM/ICPC Asia Regional Online —— Warmup

    hduoj 4706 Children's Day 2013 ACM/ICPC Asia Regional Online —— Warmup Herding Time Limit: 2000/1000 ...

  7. hduoj 4707 Pet 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4707 Pet Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  8. hduoj 4706 Children&#39;s Day 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4706 Children's Day Time Limit: 2000/1000 MS (Java/Others) ...

  9. ACM - ICPC World Finals 2013 A Self-Assembly

    原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...

随机推荐

  1. P2041 分裂游戏

    P2041 分裂游戏 手推$n=3$是无解的,推断$n>=3$是无解的 证明略,这是道结论题. #include<iostream> #include<cstdio> # ...

  2. Python函数: any()和all()的用法

    版权声明:本文为博主原创文章,未经允许不得转载 引子 平常的文本处理工作中,我经常会遇到这么一种情况:用python判断一个string是否包含一个list里的元素. 这时候使用python的内置函数 ...

  3. Python进阶-操作redis

    1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'z ...

  4. stall and flow separation on airfoil or blade

    stall stall and flow separation Table of Contents 1. Stall and flow separation 1.1. Separation of Bo ...

  5. 初学hash

    hash定义: Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种 ...

  6. vue api

    1. vue.config.silent = true 取消 Vue 所有的日志与警告. 2.vue.config.productionTip= false 设置为 false 以阻止 vue 在启动 ...

  7. 【Codeforces 375B】Maximum Submatrix 2

    [链接] 我是链接,点我呀:) [题意] 如果任意行之间可以重新排序. 问你最大的全是1的子矩阵中1的个数 [题解] 设cnt[i][j] 表示(i,j)这个点往右连续的1的个数 我们枚举列j 然后对 ...

  8. CodeForcesGym 100753K Upside down primes

    Upside down primes Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForc ...

  9. Meanshift,聚类算法

    记得刚读研究生的时候,学习的第一个算法就是meanshift算法,所以一直记忆犹新,今天和大家分享一下Meanshift算法,如有错误,请在线交流. Mean Shift算法,一般是指一个迭代的步骤, ...

  10. 洛谷—— P2049 魔术棋子

    https://www.luogu.org/problem/show?pid=2049 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中 ...