COGS [USACO Mar07] 奶牛交通

[USACO Mar07] 奶牛交通

农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治.

这个牧区包括一个由M (1 ≤ M ≤ 50,000)条单行道路(有向)组成的网络,以及 N (1 ≤ N ≤ 5,000)个交叉路口(编号为1..N),每一条道路连接两个不同的交叉路口.奶牛宿舍位于第N个路口.每一条道路都由编号较小的路口通向编号较大的路 口.这样就可以避免网络中出现环.显而易见,所有道路都通向奶牛宿舍.而两个交叉路口可能由不止一条边连接.

在准备睡觉的时候,所有奶牛都从他们各自所在的交叉路口走向奶牛宿舍,奶牛只会在入度为0的路口,且所有入度为0的路口都会有奶牛.

帮助FJ找出最忙碌的道路,即计算所有路径中通过某条道路的最大次数.答案保证可以用32位整数存储.

输入格式:

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

输出格式:

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

样例输入:

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

样例输出

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

通过某一条路的次数就是通过某一条路两端点路径条数的乘积f[i]代表从一个入度为0的点到f[i]的路径条数g[i]代表从n到i点的路径条数

f[i]=Sum{ f[j] } 存在边(j,i)g[i]=Sum{ g[j] } 存在边(i,j) 

f[k]=1 k为入度为0的点g[n]=1;ans=Max{ f[a]*g[b] } 存在边(a,b) 

 1 #include <cctype>
 2 #include <cstdio>
 3
 4 const int MAXN=5010;
 5
 6 int n,m;
 7
 8 int f[MAXN],g[MAXN];
 9
10 struct node {
11     int to;
12     int next;
13     node() {}
14     node(int to,int next):to(to),next(next) {}
15 };
16 node e[MAXN*10],r[MAXN*10];
17
18 int head[MAXN],Head[MAXN],tot;
19
20 inline void read(int&x) {
21     int f=1;register char c=getchar();
22     for(x=0;!isdigit(c);c==‘-‘&&(f=-1),c=getchar());
23     for(;isdigit(c);x=x*10+c-48,c=getchar());
24     x=x*f;
25 }
26
27 inline int max(int a,int b) {return a<b?b:a;}
28
29 inline void add(int x,int y) {
30     e[++tot]=node(y,head[x]);
31     head[x]=tot;
32     r[tot]=node(x,Head[y]);
33     Head[y]=tot;
34 }
35
36 int hh() {
37     freopen("cowtraffic.in","r",stdin);
38     freopen("cowtraffic.out","w",stdout);
39     read(n);read(m);
40     int x,y;
41     for(register int i=1;i<=m;++i) {
42         read(x);read(y);
43         add(x,y);
44         if(x>y) x^=y^=x^=y;//其实没必要
45     }
46     g[n]=1;
47     for(register int i=1;i<=n;++i)
48       if(!Head[i]) f[i]=1;
49
50     for(register int i=1;i<=n;++i)
51       for(register int j=head[i];j;j=e[j].next)
52         f[e[j].to]+=f[i];
53
54     for(register int i=n;i>=1;--i)
55       for(register int j=Head[i];j;j=r[j].next)
56         g[r[j].to]+=g[i];
57
58     int ans=-1;
59     for(register int i=1;i<=n;++i)
60       for(register int j=head[i];j;j=e[j].next)
61         ans=max(ans,f[i]*g[e[j].to]);
62     printf("%d\n",ans);
63     return 0;
64 }
65
66 int sb=hh();
67 int main(int argc,char**argv) {;}

代码

 
时间: 2024-10-12 20:34:53

COGS [USACO Mar07] 奶牛交通的相关文章

157. [USACO Nov07] 奶牛跨栏

157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in   输出文件:hurdles.out 时间限制:1 s   内存限制:128 MB 译 by CmYkRgB123 描述 Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏.她们很累,所以她们想消耗最少的能量来跨栏. 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难.于是,奶牛们总是关心路径上最高的栏的高度. 奶牛的训练场中有 N (1 ≤ N ≤ 300)

SPFA cojs 176. [USACO Feb07] 奶牛聚会

cojs 176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对农场.通过道路i会花费Ti (1 ≤ Ti ≤ 100)的时间. 作为参加聚会的奶牛必须走到聚会的所在地(农场X).当聚会结束时,还要返回各自的农场.

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

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 618  Solved: 217[Submit][Status] Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 50,000)条单行道路(有向)组成的网络,以及 N (1 ≤ N ≤ 5,000)个

bzoj1638[Usaco2007 Mar]Cow Traffic 奶牛交通*

bzoj1638[Usaco2007 Mar]Cow Traffic 奶牛交通 题意: N点M边有向图,每个入度为0的点都有无限只奶牛,现在它们要回宿舍(点1),求通过量最大的路的通过量.N≤5000,M≤50000 题解: 一条路的通过量=到达节点到入度为0节点的方案数*点1到出发节点的方案数(其实我也不知道为什么,这题意完全是模糊的),2次dfs就行了. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <al

【USACO】奶牛跑步2

P1443 - [USACO]奶牛跑步2 Description FJ的N(1 <= N <= 100,000)头奶牛们又兴高采烈地出来运动了!她们在一条无限长的小路上跑步,每头牛起跑的位置都不同,速度也不尽相同. 道路中划出了若干条跑道,以便她们能快速"超车",同一跑道中的任意两头牛都不会出现在相同的位置.不过FJ不愿让任何一头牛更换跑道或者调整速度,他想 知道如果让牛们跑足T(1 <= T <= 1,000,000,000)分钟的话,至少需要多少条跑道才能满

【COGS &amp; USACO】896. 圈奶牛(凸包)

http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点确定一条线变成一个点从原点o出发的射线!!!! 这就是所谓的玩概念吗 然后用所谓的向量加减,是这些向量起点相同,然后就变成了原点o出发的射线!!! 然后你们还在玩概念!我跪了. (以上纯属蒟蒻吐槽) 好吧,计算几何非常有用的..简化了不少操作. 这里还有啥点积啥叉积.点积就是同一起点的向量(终点)的

cogs 762. [USACO Open09] 奶牛队列

★   输入文件:cline.in   输出文件:cline.out   简单对比时间限制:1 s   内存限制:128 MB 农夫约翰有N头牛,编号依次为1-N,他正在把这些牛排成一队,队伍中开始是没有牛的,随着时间推移,牛儿一个一个地从左端或右端加入到队伍中来.令人烦心的是,随时会有一些牛从左端或右端离开队伍溜向草场. FJ正费劲地给牛排队,请你帮帮他. 奶牛按1-N的顺序入队,牛一旦离队就再也不会回来了,你的程序将处理给定的S(1 <= S <= 100,000)个输入指令,每一个指令占

[USACO Mar07] 月度花费

Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后 N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=moneyi<=10,000),他想要为他连续 的M(1<=M<=N)个被叫做“清算月”的结帐时期做一个预算,每一个“清算月”包含一个工作日或更多连续的工作日,每一个工作日都仅被包 含在一个“清算月”当中. FJ的目标是安排这些“清算月”,使得每个清算月的

【COGS &amp; USACO Training】710. 命名那个数字(hash+水题+dfs)

http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include