【BZOJ1638】[Usaco2007 Mar]Cow Traffic 奶牛交通【DAG】【拓扑排序】【DP】

原创 2016年05月31日 16:27:54

【题目链接】

对于一条边(u, v),经过这条边的次数为(1到u的路径个数)*(v到n的路径个数)。

正反跑两次拓扑序,然后枚举边,统计答案。


一开始以为(1到u的路径个数)就是经过边(u, v)的次数,结果WA啦。

/* Telekinetic Forest Guard */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <utility>

using namespace std;

typedef long long LL;
typedef pair<int, int> pii;

const int maxn = 5005, maxm = 50005;

int n, m, head[maxn], cnt, in[maxn], out[maxn], dp[maxn], dp2[maxn], q[maxn];

struct _edge {
	int v, next;
} g[maxm << 1];

pii e[maxm];

inline int iread() {
	int f = 1, x = 0; char ch = getchar();
	for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return f * x;
}

inline void add(int u, int v) {
	g[cnt] = (_edge){v, head[u]};
	head[u] = cnt++;
}

int main() {
	n = iread(); m = iread();
	for(int i = 1; i <= n; i++) head[i] = -1; cnt = 0;
	for(int i = 1; i <= m; i++) {
		int u = iread(), v = iread();
		e[i] = pii(u, v);
		add(u, v); add(v, u); out[u]++; in[v]++;
	}

	int h = 0, t = 0;
	for(int i = 1; i <= n; i++) if(!in[i]) dp[q[t++] = i] = 1;
	while(h != t) {
		int u = q[h++];
		for(int i = head[u]; ~i; i = g[i].next) if(~i & 1) {
			dp[g[i].v] += dp[u];
			in[g[i].v]--;
			if(!in[g[i].v]) q[t++] = g[i].v;
		}
	}

	h = t = 0;
	for(int i = 1; i <= n; i++) if(!out[i]) dp2[q[t++] = i] = 1;
	while(h != t) {
		int u = q[h++];
		for(int i = head[u]; ~i; i = g[i].next) if(i & 1) {
			dp2[g[i].v] += dp2[u];
			out[g[i].v]--;
			if(!out[g[i].v]) q[t++] = g[i].v;
		}
	}

	int ans = 0;
	for(int i = 1; i <= m; i++) ans = max(ans, dp[e[i].first] * dp2[e[i].second]);
	printf("%d\n", ans);
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

2016.11.12 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MB Submi...

POJ3272 奶牛交通 解题报告

【问题描述】        随着牛的数量增加,农场的道路的拥挤现象十分严重,特别是在每天晚上的挤奶时间。为了解决这个问题,FJ决定研究这个问题,以能找到导致拥堵现象的瓶颈所在。   牧场...

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

Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 50,000)...

COGS [USACO Mar07] 奶牛交通

[USACO Mar07] 奶牛交通 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 5...

bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通

Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 50,000)...
  • zhb1997
  • zhb1997
  • 2014年07月29日 12:28
  • 609

[BZOJ1638][Usaco2007 Mar]Cow Traffic 奶牛交通

边化点+建正反图+记忆化搜索.
  • Zvezda_
  • Zvezda_
  • 2015年10月26日 22:53
  • 302

BZOJ 1638: Cow Traffic 奶牛交通 DFS路径计数

BZOJ 1638: Cow Traffic 奶牛交通 DFS路径计数

USACO 刷水

bzoj 上用来快速涨排名的 USACO silver 题,,, 这个星期刷完。 【BZOJ1622】【USACO2008 Open】名字的力量 【BZOJ1613】【USACO2007 Jan】贝...
  • czysjr
  • czysjr
  • 2014年12月24日 17:21
  • 1173

[BZOJ1912][Apio2010]patrol 巡逻(树上最长链)

zyf2000说如果我搭博客她就把草稿箱里的题解发出来嘿嘿嘿嘿嘿嘿嘿嘿嘿
  • FromATP
  • FromATP
  • 2016年08月20日 09:59
  • 268

【记录】绵东实三校联考 验题记录

感觉已经快成御用验题小天使 = =。。 姜神出的题,然后cyx小朋友成功AK了   【T1】 排队 Waiting 这题和之前有一道NOIp题差不多。。做法也是一样的。。排个序就万事大吉了。 听说有人...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【BZOJ1638】[Usaco2007 Mar]Cow Traffic 奶牛交通【DAG】【拓扑排序】【DP】
举报原因:
原因补充:

(最多只允许输入30个字)