题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1638

题意:

  给你一个有向图,n个点,m条有向边。

  对于所有从入度为0的点到n的路径,找出被经过次数最多的一条边,输出这个次数。

题解:

  edge为原边,redge为反向边。

  cnt[i]表示从入度为0的点到i的路径数。

  rev[i]表示从i到n的路径数。

  两遍记忆化搜索,处理出数组cnt和rev。

  每条边(a,b)被经过的次数 = cnt[a]*rev[b]

  扫一遍取最大,即为答案。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX_N 5005 using namespace std; int n,m;
int ans=;
int cnt[MAX_N];
int rev[MAX_N];
vector<int> edge[MAX_N];
vector<int> redge[MAX_N]; void read()
{
cin>>n>>m;
int a,b;
for(int i=;i<m;i++)
{
cin>>a>>b;
edge[a].push_back(b);
redge[b].push_back(a);
}
} void dfs(int now,int *cnt,const vector<int> *edge)
{
if(cnt[now]!=-) return;
if(!edge[now].size())
{
cnt[now]=;
return;
}
cnt[now]=;
for(int i=;i<edge[now].size();i++)
{
int temp=edge[now][i];
dfs(temp,cnt,edge);
cnt[now]+=cnt[temp];
}
} void solve()
{
memset(cnt,-,sizeof(cnt));
memset(rev,-,sizeof(rev));
for(int i=;i<=n;i++)
{
if(rev[i]==-) dfs(i,rev,edge);
}
dfs(n,cnt,redge);
for(int i=;i<=n;i++)
{
for(int j=;j<edge[i].size();j++)
{
int temp=edge[i][j];
ans=max(ans,cnt[i]*rev[temp]);
}
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 1638 [Usaco2007 Mar]Cow Traffic 奶牛交通:记忆化搜索【图中边的经过次数】的更多相关文章

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

    震惊!记忆化搜索忘记返回map值调了半小时! 边(u,v)的经过次数是:能到u的牛数*v到n的方案数.正反两次连边,dfs两次即可 #include<iostream> #include& ...

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

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 618  Solved: 217 ...

  3. 【BZOJ】1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(dfs+dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1638 一条边(u, v)经过的数量=度0到u的数量×v到n的数量 两次记忆化dfs算出他们即可 #i ...

  4. BZOJ1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 571  Solved: 199 ...

  5. 【动态规划】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> ...

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

    直接floyd.. ---------------------------------------------------------------------------- #include<c ...

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

    Description Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏.她们很累,所以她们想消耗最少的能量来跨栏. 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高 ...

  8. BZOJ 1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏:新版floyd【路径上最大边最小】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1641 题意: 给你一个有向图,n个点(n <= 300),m条边,边权为h[i]. ...

  9. bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏【Floyd】

    先跑一遍取max版的Floyd,直接用数组回答询问即可 #include<iostream> #include<cstdio> using namespace std; con ...

随机推荐

  1. 【MVC2】发布到IIS上User.Identity.Name变成空

    VS中运行时通过User.Identity.Name能取到用户名,发布到IIS上后,该值为空. 调查后发现在网站设定→[认证]中同时打开了[Windows认证]和[匿名认证], 关掉[匿名认证]后就能 ...

  2. Android源代码解析之(六)--&gt;Log日志

    转载请标明出处:一片枫叶的专栏 首先说点题外话,对于想学android framework源代码的同学,事实上能够在github中fork一份,详细地址:platform_frameworks_bas ...

  3. python:如何判断字符串中的内容是否都为数字并且把字符串转换为数字

    使用str.isdigit();有两种使用方法 str.isdigit('12345') =====>True str.isdigit('aaaaa')======>False 或者 '1 ...

  4. css:html() text() val()

    转http://www.jb51.net/article/35867.htm .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTM ...

  5. DNA分子结构3D模型

    生物信息资源更新越来越快,使用可视化的方法来分析DNA序列已成为生物信息学的一个研究热点,用图形表示DNA序列的方法也越来越成熟.2011年,著名杂志<Science>发表一篇引起轰动的文 ...

  6. SQLAlchemy使用笔记--SQLAlchemy ORM(三)

    參考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#eager-loading 预先载入 前面的代码,由于是lazy load.当我 ...

  7. sudo apt-get update 没有公钥,无法验证下列签名

    在更新系统源后,输入sudo apt-get update之后出现提示: W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease ...

  8. Lua学习二----------Lua的基本语法

    © 版权声明:本文为博主原创文章,转载请注明出处 Lua基本语法: 1.--表示单行注释 2.--[[--]]表示多行注释 3.Lua区分大小写 4.Lua中变量默认是全局变量,除非用local显式声 ...

  9. java中 ExecutorService,Executor,ThreadPoolExecutor的用法

    package com; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import ...

  10. Oracle更新时间字段

    update field set BEGINDATE=to_date('2015-05-03 10:30:20','yyyy-mm-dd hh24:mi:ss') where NOO='01'