【动态规划】bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通

设f[u]为从度数0到u的路径条数,f2[u]为从u到n的路径条数。

ans=max{f[x[i]]*f2[y[i]]}(1<=i<=m)。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 5001
typedef long long ll;
#define M 50001
int e,v[M],first[N],next[M];
void AddEdge(int U,int V)
{
	v[++e]=V;
	next[e]=first[U];
	first[U]=e;
}
ll f[N],f2[N];
int ru[N],m,n;
int x[M],y[M];
ll ans;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i)
	  {
	  	scanf("%d%d",&x[i],&y[i]);
	  	++ru[y[i]];
		AddEdge(y[i],x[i]);
	  }
	for(int i=1;i<=n;++i)
	  if(!ru[i])
	    f[i]=1;
	for(int i=1;i<=n;++i)
	  for(int j=first[i];j;j=next[j])
	    f[i]+=f[v[j]];
	e=0;
	memset(first+1,0,sizeof(int)*n);
	for(int i=1;i<=m;++i) AddEdge(x[i],y[i]);
	f2[n]=1;
	for(int i=n;i;--i)
	  for(int j=first[i];j;j=next[j])
	    f2[i]+=f2[v[j]];
	for(int i=1;i<=m;++i) ans=max(ans,f[x[i]]*f2[y[i]]);
	printf("%d\n",ans);
	return 0;
}
时间: 2024-08-23 23:15:59

【动态规划】bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通的相关文章

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

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)个

bzoj 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通【记忆化搜索】

震惊!记忆化搜索忘记返回map值调了半小时! 边(u,v)的经过次数是:能到u的牛数*v到n的方案数.正反两次连边,dfs两次即可 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=5005,M=50005; int n,m,x[M],y[M],h[N],cnt,ans,f[N],g[N]; struct qwe { int ne,to; }e[M

1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏

1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 424  Solved: 272[Submit][Status] Description Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏.她们很累,所以她们想消耗最少的能量来跨栏. 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难.于是,奶牛们总是关心路径上最高的栏的高度. 奶牛的训练场

BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏( floyd )

直接floyd.. ---------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ;  i < n ; ++i ) #define clr( x

BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏

Description Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏.她们很累,所以她们想消耗最少的能量来跨栏. 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难.于是,奶牛们总是关心路径上最高的栏的高度. 奶牛的训练场中有 N (1 ≤ N ≤ 300) 个站台,分别标记为1..N.所有站台之间有M (1 ≤ M ≤ 25,000)条单向路径,第i条路经是从站台Si开始,到站台Ei,其中最高的栏的高度为Hi (1 ≤ Hi ≤ 1,000,000)

Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset

1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 323  Solved: 238[Submit][Status][Discuss] Description 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序.    约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他发现,他还需要再做一

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 129  Solved: 84[Submit][Status][Discuss] Description 农夫顿因开始玩飞盘之后,约翰也打算让奶牛们享受飞盘的乐趣.他要组建一只奶牛飞盘 队.他的N(1≤N≤2000)只奶牛,每只部有一个飞盘水准指数Ri(1≤Ri≤100000).约翰要选出1只或多于1只奶牛来参加他的

BZOJ3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 89  Solved: 60[Submit][Status] Description 农夫顿因开始玩飞盘之后,约翰也打算让奶牛们享受飞盘的乐趣.他要组建一只奶牛飞盘 队.他的N(1≤N≤2000)只奶牛,每只部有一个飞盘水准指数Ri(1≤Ri≤100000).约翰要选出1只或多于1只奶牛来参加他的飞盘队.由于约翰的幸