博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通
阅读量:6195 次
发布时间:2019-06-21

本文共 922 字,大约阅读时间需要 3 分钟。

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

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

#include
#include
#include
using namespace std;#define N 5001typedef long long ll;#define M 50001int 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;}

转载于:https://www.cnblogs.com/autsky-jadek/p/4504096.html

你可能感兴趣的文章
将String转化成Stream,将Stream转换成String
查看>>
判断一个文件是否是指定后缀名的文件
查看>>
Enterprise Architect使用教程
查看>>
【Coursera】Technology :Fifth Week(1)
查看>>
sql语句的join用法
查看>>
[LeetCode] Add Two Numbers II 两个数字相加之二
查看>>
HDU-1828-Picture(线段树)
查看>>
第二百四十七节,Bootstrap按钮和折叠插件
查看>>
Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)
查看>>
树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度
查看>>
Android HandlerThread 源代码分析
查看>>
eslint的安装与使用
查看>>
[React] Make Controlled React Components with Control Props
查看>>
几个性能测试工具
查看>>
1.移植uboot-分析uboot启动流程(详解)
查看>>
011-spring cloud gateway-使用
查看>>
纯css3云彩动画效果
查看>>
别过来,过来我就撕票了!
查看>>
WPF手绘进度条
查看>>
python sys.stdin.readline & sys.stdin.readlines() test
查看>>