Luogu5243

题解\

即O(N^2)暴力统计出每个森林的路径,从ctgn个集合中各选出一个数,使得长度>=Y的方案数.

用背包统计.具体实现:

\(dp[i+j][0]\leftarrow dp[i][0]*g[j][0]\)

\(dp[i+j][1]\leftarrow dp[i][0]*g[j][1] + dp[i][1]*g[j][0]\)

然后就是>=Y的和Y放到一起,并且可以从X*ctgn就开始转移

细节详见代码

数据范围\((n^2)\)能做的事 : 以每个点为根遍历一遍算答案 . 正确性 : 以每一个点为一个端点来统计

还可以做的事 : 背包问题

#include<bits/stdc++.h>
#define Rep(i,a,b) for(register int i=(a);i<=(b);++i)
#define Repe(i,a,b) for(register int i=(a);i>=(b);--i)
#define rep(i,a,b) for(register int i=(a);i<(b);++i)
#define pb push_back
#define mx(a,b) (a>b?a:b)
#define mn(a,b) (a<b?a:b)
typedef unsigned long long uint64;
typedef unsigned int uint32;
typedef long long ll;
using namespace std; namespace IO
{
const uint32 Buffsize=1<<15,Output=1<<24;
static char Ch[Buffsize],*S=Ch,*T=Ch;
inline char getc()
{
return((S==T)&&(T=(S=Ch)+fread(Ch,1,Buffsize,stdin),S==T)?0:*S++);
}
static char Out[Output],*nowps=Out; inline void flush(){fwrite(Out,1,nowps-Out,stdout);nowps=Out;} template<typename T>inline void read(T&x)
{
x=0;static char ch;T f=1;
for(ch=getc();!isdigit(ch);ch=getc())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getc())x=x*10+(ch^48);
x*=f;
} template<typename T>inline void write(T x,char ch='\n')
{
if(!x)*nowps++='0';
if(x<0)*nowps++='-',x=-x;
static uint32 sta[111],tp;
for(tp=0;x;x/=10)sta[++tp]=x%10;
for(;tp;*nowps++=sta[tp--]^48);
*nowps++=ch;
}
}
using namespace IO; void file(void)
{
FILE*DSD=freopen("water.in","r",stdin);
FILE*CSC=freopen("water.out","w",stdout);
} const int MAXN=1500+7,MAXY=2500+7,mod=1e9+7; static int n,m; static struct edge
{
int v,w,nxt;
}p[MAXN<<1]; static int head[MAXN],e; inline void add(int u,int v,int w)
{p[++e]=(edge){v,w,head[u]},head[u]=e;} namespace DSU
{
static int fa[MAXN]; inline void clear(){Rep(i,1,n)fa[i]=i;} inline int Find(int u){return u==fa[u]?u:fa[u]=Find(fa[u]);}
} static int X,Y; inline void init()
{
read(n),read(m),read(X),read(Y);
DSU::clear();
static int u,v,w;
Rep(i,1,m)read(u),read(v),read(w)
,add(u,v,w),add(v,u,w),DSU::fa[DSU::Find(u)]=DSU::Find(v);
} static int cn; static int bel[MAXN],dst[MAXN][MAXY],sig[MAXN][MAXY]; void dftag(int u,int fr,int dir)
{
bel[u]=dir;
for(register int i=head[u];i;i=p[i].nxt)
{
int v=p[i].v;
if(v^fr)dftag(v,u,dir);
}
} void dffix(int u,int fr,int len)
{
//dst[i][j]:预处理第i颗森林长度为j的路径条数; sig[i][j]:路径长度之和
//细节处理:不是根节点才能算路径方案数
if(fr)(sig[bel[u]][min(Y,len)]+=len)%=mod,++dst[bel[u]][min(Y,len)];
for(register int i=head[u];i;i=p[i].nxt)
{
int v=p[i].v;
if(v^fr)dffix(v,u,len+p[i].w);
}
} static int dp[MAXY][2],las[MAXY][2]; inline int fac(int u)
{
register int sm=1;
Rep(i,2,u)sm=(ll)sm*i%mod;
return sm;
} inline void solve()
{
Rep(i,1,n)if(DSU::Find(i)==i)++cn,dftag(i,0,cn);
Rep(i,1,n)dffix(i,0,0);//以每个点为根遍历出所有路径
static int st=min(Y,X*cn);//取min的唯一目的就是把超过Y的放到Y里面,仅此而已
dp[st][0]=1,dp[st][1]=X*cn;//初始状态有1种方案,总长度为所有的X边
Rep(i,1,cn)
{
Rep(j,st,Y)las[j][0]=dp[j][0]
,las[j][1]=dp[j][1],dp[j][0]=dp[j][1]=0;//先存起来
//注意有0边
Rep(j,0,Y)if(dst[i][j])Rep(k,st,Y)if(las[k][0])//本来是倒序枚举的背包,但是上限可能会超过Y不好控制,就顺序枚举对j+k和Y取min来更新
{
dp[min(j+k,Y)][0]=(dp[min(j+k,Y)][0]+
(ll)las[k][0]*dst[i][j])%mod; dp[min(j+k,Y)][1]=(dp[min(j+k,Y)][1]+
(ll)las[k][0]*sig[i][j]+(ll)las[k][1]*dst[i][j])%mod;//统计每条路径分别需要和另一块组合几次,即算几次贡献
}
}
cout<<(ll)dp[Y][1]*fac(cn-1)%mod*((mod+1)/2)%mod<<endl;//最后考虑cn个联通块之间连接的顺序排列
} int main()
{
//file();
init();
solve();
return 0;
}

[USACO19FEB]Moorio Kart(DP)的更多相关文章

  1. [USACO19FEB]Moorio Kart

    题目 我们的神仙教练在考试里放了这道题,当时我非常惊讶啊 背包是\(O(n^3)\)的吧明明是带根号的好吧,那既然要优化的话 NTT!什么时候我们教练会在考试里放多项式了 模数\(1e9+7\)? 任 ...

  2. DP小小结

    入门题 : [Luogu1441]砝码称重 , [NOIP2015]子串 [AHOI2009]中国象棋 , 详见代码 [HNOI2007]梦幻岛宝珠 , 详见代码 [NOIP2012]开车旅行 , 没 ...

  3. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  4. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  5. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  6. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  7. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  8. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

随机推荐

  1. Excel向数据库插入数据和数据库向Excel导出数据

    为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,my ...

  2. openGL一些概念02

    着色器程序 着色器程序对象(Shader Program Object)是多个着色器合并之后并最终链接完成的版本. 如果要使用刚才编译的着色器我们必须把他们链接为一个着色器程序对象,然后在渲染对象的时 ...

  3. 1-EasyNetQ介绍(黄亮翻译)

    EasyNetQ 是一个容易使用,坚固的,针对RabbitMQ的 .NET API. 假如你尽可能快的想去安装和运行RabbitMQ,请去看入门指南. EasyNetQ是为了提供一个尽可能简洁的适用与 ...

  4. 记录一次手机联系人整理(XML文件格式处理)

    场景:1.IOS手机和Android手机联系人同步时有部分重复联系人. 2.很早以前的HTC手机导出的联系人中备注信息有大量乱码,且很多联系人生日被设置为1970-01-01,导致生日提醒软件产生骚扰 ...

  5. 2018网络预选赛 徐州G 线段树

    线段树,假设求(x1,y1)点的贡献,就找所有比该点出现时间晚,且x坐标大于x1的点中y最大的,贡献就是Y-y1,由于题目条件限制,不可能有x坐标大于(x1,y1)且y坐标大于y1的点,所以贡献肯定为 ...

  6. ROS Learning-029 (提高篇-007 A Mobile Base-05) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(精确的制定目标位置)

    ROS 提高篇 之 A Mobile Base-05 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(精确的制定目标位置) 使用 odometry 消息类型 重写 out_and_ba ...

  7. 前端基础 之 BOM和DOM

    浏览目录 背景 BOM window对象 window的子对象 DOM HTML DOM树 查找标签 节点操作 事件 一.背景 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些 ...

  8. html 里 checkbox里 只要选中就会自动添加checked=“checked”么?

    事实上HTML代码是不会发生变化的,但是控件对象的属性会发生变化以反映这个操作的结果.也就是说,该对象的checked属性值会由false变成true.但元素标签中并不会插入checked=" ...

  9. Eclipse报错could not write metadata for '/remotesystemstempfiles'

    1. windows-Preferences  中,在search中输入remote,取消选中reopen remote systems view to previous state'. 2. win ...

  10. (数组)字符串的回文构词法( anagrams)

    题目:https://www.nowcoder.com/practice/e84e273b31e74427b2a977cbfe60eaf4?tpId=46&tqId=29130&tPa ...