拓扑排序/DP【洛谷P2883】 [USACO07MAR]牛交通Cow Traffic
P2883 [USACO07MAR]牛交通Cow Traffic
随着牛的数量增加,农场的道路的拥挤现象十分严重,特别是在每天晚上的挤奶时间。为了解决这个问题,FJ决定研究这个问题,以能找到导致拥堵现象的瓶颈所在。
牧场共有M条单向道路,每条道路连接着两个不同的交叉路口,为了方便研究,FJ将这些交叉路口编号为1..N,而牛圈位于交叉路口N。任意一条单向道路的方向一定是是从编号低的路口到编号高的路口,因此农场中不会有环型路径。同时,可能存在某两个交叉路口不止一条单向道路径连接的情况。
在挤奶时间到来的时候,奶牛们开始从各自的放牧地点回到牛圈。放牧地点是指那些没有道路连接进来的路口(入度为0的顶点)。
现在请你帮助fj通过计算从放牧点到达牛圈的路径数目来找到最繁忙的道路(答案保证是不超过32位整数)。
思维固化了。
看到这题直接套上P1685 游览的板子。
才得60分。
再读题(看题解),发现这题会有多个起点,多个终点。
那么对于多个终点,只能去n,所以还要从n建反边跑一边拓扑排序,这样一条边的贡献就是\(g(u)*f(v)\)。
好像我用了最笨的方法跑两边拓扑排序。
code:
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int wx=500017;
inline int read(){
int sum=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
return sum*f;
}
int n,m,ans;
int num,tot;
int g[wx],head[wx],h[wx],f[wx];
int in[wx],out[wx],in2[wx],out2[wx];
struct e{
int nxt,to;
}edge[wx*2];
void add(int from,int to){
edge[++num].nxt=head[from];
edge[num].to=to;
head[from]=num;
}
struct ee{
int nxt,to;
}e[wx*2];
void ADD(int from,int to){
e[++tot].nxt=h[from];
e[tot].to=to;
h[from]=tot;
}
queue<int > q;
void bfs1(){
for(int i=1;i<=n;i++)if(!in[i])g[i]=1,q.push(i);
while(q.size()){
int u=q.front(); q.pop();
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
g[v]+=g[u];
in[v]--;
if(!in[v]){
q.push(v);
}
}
}
}
void bfs2(){
for(int i=1;i<=n;i++)if(!in2[i])f[i]=1,q.push(i);
while(q.size()){
int u=q.front(); q.pop();
for(int i=h[u];i;i=e[i].nxt){
int v=e[i].to;
f[v]+=f[u];
in2[v]--;
if(!in2[v])q.push(v);
}
}
for(int u=1;u<=n;u++){
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
ans=max(ans,g[u]*f[v]);
}
}
}
int main(){
n=read(); m=read();
for(int i=1;i<=m;i++){
int x,y;
x=read(); y=read();
if(x>y)swap(x,y);
add(x,y); in[y]++; out[x]++;
ADD(y,x); in2[x]++; out2[y]++;
}
bfs1();
bfs2();
printf("%d\n",ans);
return 0;
}
拓扑排序/DP【洛谷P2883】 [USACO07MAR]牛交通Cow Traffic的更多相关文章
- bzoj1638 / P2883 [USACO07MAR]牛交通Cow Traffic
P2883 [USACO07MAR]牛交通Cow Traffic 对于每一条边$(u,v)$ 设入度为0的点到$u$有$f[u]$种走法 点$n$到$v$(通过反向边)有$f2[v]$种走法 显然经过 ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- 洛谷 P2419 [USACO08JAN]牛大赛Cow Contest
题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...
- 洛谷——P2952 [USACO09OPEN]牛线Cow Line
P2952 [USACO09OPEN]牛线Cow Line 题目描述 Farmer John's N cows (conveniently numbered 1..N) are forming a l ...
- 洛谷 P3014 [USACO11FEB]牛线Cow Line
P3014 [USACO11FEB]牛线Cow Line 题目背景 征求翻译.如果你能提供翻译或者题意简述,请直接发讨论,感谢你的贡献. 题目描述 The N (1 <= N <= 20) ...
- 洛谷 P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver
P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题目描述 The cows are out exercising their hooves again! There are N ...
- [洛谷P3014][USACO11FEB]牛线Cow Line (康托展开)(数论)
如果在阅读本文之前对于康托展开没有了解的同学请戳一下这里: 简陋的博客 百度百科 题目描述 N(1<=N<=20)头牛,编号为1...N,正在与FJ玩一个疯狂的游戏.奶牛会排成一行 ...
- 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver
传送门 题目大意:n头牛在单行道n个位置,开始用不同的速度跑步. 当后面的牛追上前面的牛,后面的牛会和前面的牛以一样的速度 跑,称为一个小团体.问:ts后有多少个小团体. 题解:模拟 倒着扫一遍,因为 ...
- 洛谷—— P2419 [USACO08JAN]牛大赛Cow Contest
https://www.luogu.org/problem/show?pid=2419 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, convenie ...
随机推荐
- Python类(三)-多继承的区别
多继承的有两个方式,一个是广度优先,一个是深度优先Python2中经典类按深度优先,新式类按广度优先Python3中经典类和新式类都按广度优先 # -*- coding:utf-8 -*- __aut ...
- 2014.2.23 datagridview显示图片的方法
DataTable dt = new DataTable(); dt.Columns.Add("", typeof(byte[])); dt.Rows.Add(File.ReadA ...
- [vijos1246]文科生的悲哀(二) 动态规划
背景 化学不及格的Matrix67无奈选择了文科.他必须硬着头皮艰难地进行着文科的学习. 描述 这学期的政治.历史和地理课本各有n章.每一科的教学必须按章节从前往后依次进行.若干章政治.若干章历史和若 ...
- Http服务端
第一,使用node提供的http模块 var http=require('http'); 第二,创建一个服务器实例 通过http的createServer()方法. var server=http.c ...
- dubbo错误排查之No provider available for the service
今天搞的一个dubbo服务,暴漏出来了,但是consumer端启动就报这个错,排查过程记录一下 一.启动zkCli 利用命令查看 ls / ls /dubbo 继续查看 ls /dubbo/com.w ...
- maven中pom.xml元素含义
- JAVA基础知识总结11(异常)
异常: 就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多个属性信息存在. ...
- Selenium二次封装-Python版本
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-007Inheritance of embeddable classes(@MappedSuperclass、@Embeddable、@AttributeOverrides、、)
一.结构 二.代码 1. package org.jpwh.model.inheritance.embeddable; import javax.persistence.MappedSuperclas ...
- 【实习项目记录】(四)Android 实现手机验证时,按钮倒计时60s
手机注册一般都会有一个按钮,默认显示获取验证码,点击之后变成xx秒之后重新获取验证码 在网上查到有两种方法可以实现这种功能,一种是自定义一个timeButton,另外一种是利用封装好的60秒获取验证码 ...