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

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 571  Solved: 199
[Submit][Status]

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

HINT

Source

Silver

题解:

这道题还不错,正反两次递推

对于一条边(a,b),原图中入度为0的点到a的路径条数F,原图中b到N的路径条数G,那么这条边的经过次数为F*G

代码:(copy hzwer)

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define ll long long
#define inf 1000000000
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,cnt1,cnt2,ans;
int u[],v[];
int head[],h[],f[],g[],r[];
struct edge1{int to,next;}e[];
struct edge2{int to,next;}ed[];
void insert(int u,int v)
{
e[++cnt1].to=v;e[cnt1].next=head[u];head[u]=cnt1;
ed[++cnt2].to=u;ed[cnt2].next=h[v];h[v]=cnt2;
}
void dp1(int x)
{
if(!head[x]){f[x]=;return;}
for(int i=head[x];i;i=e[i].next)
{
if(!f[e[i].to])dp1(e[i].to);
f[x]+=f[e[i].to];
}
}
void dp2(int x)
{
if(!h[x]){g[x]=;return;}
for(int i=h[x];i;i=ed[i].next)
{
if(!g[ed[i].to])dp2(ed[i].to);
g[x]+=g[ed[i].to];
}
}
int main()
{
n=read();m=read();
for(int i=;i<=m;i++)
{
u[i]=read();v[i]=read();
insert(u[i],v[i]);
}
for(int i=;i<=n;i++)
if(!f[i])dp1(i);
dp2(n);
for(int i=;i<=m;i++)
ans=max(ans,g[u[i]]*f[v[i]]);
printf("%d\n",ans);
return ;
}

最新文章

  1. 【WinRT】国内外 Windows 应用商店应用开发者博客收集
  2. 票据OCR前预处理 (附Demo)
  3. IE6不支持li:hover的解决办法,一句代码让IE6支持li:hover
  4. 网络统计学与web前端开发基础技术
  5. c#简单数组
  6. java_annotation_01
  7. Robotium--通过Id寻找控件
  8. 常用的50条linux 命令
  9. Sonar项目主要指标以及代码坏味道详解
  10. 总结的Javascript插件
  11. 【转载】 github vue 高星项目
  12. checkpoint防火墙SmartDashboard登录出错
  13. Python模块之time、datetime
  14. UVA11491-Erasing ans Winning(贪心)
  15. 笔记02 linux的一些命令sed
  16. 理解ES6中的Promise
  17. Ubuntu14.04下 升级 cmake
  18. Linux IP和网关配置
  19. 高性能JavaScript(算法和流程控制)
  20. bzoj千题计划152:bzoj3405: [Usaco2009 Open]Grazing2 移动牛棚

热门文章

  1. 树形dp入门练习(hdu1011+hdu1061)
  2. [LeetCode] 134. Gas Station 解题思路
  3. ERP售前顾问形象寓意
  4. zepto笔记
  5. Mybatis高级映射、动态SQL及获得自增主键
  6. [Git] Automatically running tests before commits with ghooks
  7. 搭建Windows下Java Web开发环境
  8. DC综合流程
  9. js框架页跳转
  10. OD: Shellcode Encoding