博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.09.08 NOIP模拟trip(最长链计数)
阅读量:5306 次
发布时间:2019-06-14

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

这里写图片描述

这里写图片描述
这里写图片描述


差不多是啊。

求最长链变成了最长链计数,其余没有变化。
这一次考试为了保险起见本蒟蒻还是写了上次没写的辅助数组。
代码:

#include
#define N 50005#define M 200005#define mod 1000000007#define ll long longusing namespace std;inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar(); return ans;}int f[N],n,m,f1[N],hd,tl,maxn=0;ll g[N],g1[N],ans=0;struct edge{
int u,v,w;}e[M<<1];inline bool cmp(edge a,edge b){
return a.w>b.w;}int main(){ freopen("trip.in","r",stdin); freopen("trip.out","w",stdout); n=read(),m=read(),hd=tl=1; for(int i=1;i<=n;++i)f[i]=1,g[i]=1; for(int i=1;i<=m;++i)e[i].u=e[i+m].v=read(),e[i].v=e[i+m].u=read(),e[i].w=e[i+m].w=read(); m<<=1; sort(e+1,e+m+1,cmp); for(int i=1;i<=m;++i){ while(e[i].w==e[i+1].w)++i,++tl; for(int j=hd;j<=tl;++j)f1[e[j].u]=f[e[j].u],g1[e[j].u]=g[e[j].u]; for(int j=hd;j<=tl;++j){ int len=f1[e[j].u]+1; if(len>f[e[j].v]){f[e[j].v]=len,g[e[j].v]=g1[e[j].u];} else if(len==f[e[j].v])(g[e[j].v]+=g1[e[j].u])%=mod; } hd=tl+1,tl=hd; } for(int i=1;i<=n;++i){ if(f[i]>maxn)maxn=f[i],ans=g[i]; else if(f[i]==maxn)(ans+=g[i])%=mod; } cout<
<<'\n'<

转载于:https://www.cnblogs.com/ldxcaicai/p/9738303.html

你可能感兴趣的文章
POJ3070 矩阵快速幂模板
查看>>
spring boot实现ssm(2)功能
查看>>
以最小代价解决同一apk不同资源定制共存问题
查看>>
第四代iPhone电池仍然不可以更换(转)
查看>>
ibatis中的符号#跟$区别
查看>>
QComboBox设置item height(行高)
查看>>
内存原理与PHP的执行过程
查看>>
P3175 [HAOI2015]按位或
查看>>
【HDU5909】Tree Cutting(FWT)
查看>>
多边形区域填充算法--扫描线填充算法(有序边表法) 有代码
查看>>
北京郊区房租面临下调压力 平均单位租金36.2元/平
查看>>
linux programing
查看>>
移动端H5实现图片上传
查看>>
House Robber
查看>>
C#基础之if语句习题
查看>>
ios推送-B/S架构-socket
查看>>
UVALive 4426 Blast the Enemy! 计算几何求重心
查看>>
结对编程收获
查看>>
【技术案例】双目摄像头数据采集
查看>>
PHPStorm 批量选择,多光标同时编辑相同的内容
查看>>