题面

题意:给你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. 字符串--P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  2. Vim常用快捷键--正常的学习曲线

    vim可能对于初学者不太友好,学习曲线有点陡,特此整理了较为平滑的学习曲线的学习快捷键的方式,包含最常用的快捷键,让初学者领悟vim的优点,想要进阶学习请查找其它更好的教程 正常模式:可以使用快捷键命 ...

  3. APUE 文件IO

    文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操 ...

  4. Python面向对象之面向对象封装案例

    面向对象封装案例 封装 封装是面型对象编程的一大特点 面向对象编程的第一步--将属性和方法封装到一个抽象的类中: 外界使用类创建对象,然后让对象调用方法: 对象方法的细节都被封装在类的内部. 一个对象 ...

  5. F - Shooter

    UVA___10535 The shooter is in a great problem. He is trapped in a “2D” maze with a laser gun and can ...

  6. 解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)

    这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 BuildPath将jar包导入,然后用MyEclipse中的:maven package命令打成 ...

  7. 【00】angular学习网站

    [00]   学习资料:   http://angularjs.cn/   英文API:http://docs.angularjs.cn/api     中文API;http://www.apjs.n ...

  8. Codeforces Round #239(Div. 2) 做后扯淡玩

    今天补了下 cf 239div2 顿时信心再度受挫 老子几乎已经木有时间了啊 坐着等死的命.哎!!! 到现在还只能做大众题,打铁都不行. 每次D题都是有思路敲错,尼玛不带这么坑爹的. 哎!不写了,写这 ...

  9. XOR的艺术

    题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...

  10. A Simple Problem with Integers 线段树 区间更新 区间查询

    Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 115624   Accepted: 35897 Case Time Lim ...