1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

Description

农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 50,000)条单行道路(有向)组成的网络,以及 N (1 ≤ N ≤ 5,000)个交叉路口(编号为1..N),每一条道路连接两个不同的交叉路口.奶牛宿舍位于第N个路口.每一条道路都由编号较小的路口通向编号较大的路口.这样就可以避免网络中出现环.显而易见,所有道路都通向奶牛宿舍.而两个交叉路口可能由不止一条边连接. 在准备睡觉的时候,所有奶牛都从他们各自所在的交叉路口走向奶牛宿舍,奶牛只会在入度为0的路口,且所有入度为0的路口都会有奶牛. 帮助FJ找出最忙碌的道路,即计算所有路径中通过某条道路的最大次数.答案保证可以用32位整数存储.

Input

第一行:两个用空格隔开的整数:N,M.

第二行到第M+1行:每行两个用空格隔开的整数ai,bi,表示一条道路从ai到bi.

Output

第一行: 一个整数,表示所有路径中通过某条道路的最大次数.

Sample Input

7 7
1 3
3 4
3 5
4 6
2 3
5 6
6 7

Sample Output

4
样例说明:

1 4
\ / \
3 6 -- 7
/ \ /
2 5
通向奶牛宿舍的所有路径:

1 3 4 6 7
1 3 5 6 7
2 3 4 6 7
2 3 5 6 7
 
 
最开始想的是用最短路,然后发现自己沙比了。。。
对于一条边(a,b),如果从入度为0的点到a有i种走法,从b到n有j种走法,那么该条边被经过了i*j次,
所以从入度为0的点开始dp,再从n点开始dp,就可以得到答案。。。
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<map>
 6 #include<queue>
 7 #include<cstring>
 8 #define ll long long
 9 #define maxn 5010
10 #define maxm 50010
11 #define inf 100000000
12 using namespace std;
13 struct edge{
14     int go,next;
15 }e[maxm];
16 edge ed[maxm];
17 int head[maxm],head2[maxm],f[maxm],g[maxm],tot;
18 int u[maxm],v[maxm];
19 void insert(int u,int v){
20     e[++tot].go=v;e[tot].next=head[u];head[u]=tot;
21     ed[tot].go=u;ed[tot].next=head2[v];head2[v]=tot;
22 }
23 void dp1(int x){
24     if(!head[x]){f[x]=1;return;}
25     for(int i=head[x];i;i=e[i].next){
26         if(!f[e[i].go])dp1(e[i].go);
27         f[x]+=f[e[i].go];
28     }
29 }
30 void dp2(int x){
31     if(!head2[x]){g[x]=1;return;}
32     for(int i=head2[x];i;i=ed[i].next){
33         if(!g[ed[i].go])dp2(ed[i].go);
34         g[x]+=g[ed[i].go];
35     }
36 }
37 int main(){
38     int n,m;
39     scanf("%d%d",&n,&m);
40     for(int i=1;i<=m;i++){
41         scanf("%d%d",&u[i],&v[i]);
42         insert(u[i],v[i]);
43     }
44     for(int i=1;i<=n;i++)
45         if(!f[i])dp1(i);
46     dp2(n);
47     int ans=0;
48     for(int i=1;i<=m;i++)
49         ans=max(ans,g[u[i]]*f[v[i]]);
50     printf("%d\n",ans);
51     return 0;
52 }
View Code

 

posted @ 2015-10-12 10:48  HTWX  阅读(165)  评论(0编辑  收藏  举报