2018.09.08 NOIP模拟trip(最长链计数)
差不多是原题啊。
求最长链变成了最长链计数,其余没有变化。
这一次考试为了保险起见本蒟蒻还是写了上次没写的辅助数组。
代码:
#include<bits/stdc++.h>
#define N 50005
#define M 200005
#define mod 1000000007
#define ll long long
using 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<<maxn-1<<'\n'<<ans;
return 0;
}
2018.09.08 NOIP模拟trip(最长链计数)的更多相关文章
- 2018.11.03 NOIP模拟 树(长链剖分优化dp)
传送门 考虑直接推式子不用优化怎么做. 显然每一个二进制位分开计算贡献就行. 即记录fi,jf_{i,j}fi,j表示距离iii这个点不超过jjj的点的每个二进制位的0/10/10/1个数. 但直接 ...
- 2018.09.08 NOIP模拟 division(状压dp)
这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;&qu ...
- 2018.09.08 NOIP模拟eat(贪心)
签到水题啊... 这题完全跟图论没有关系. 显然如果确定了哪些点会被选之后顺序已经不重要了.于是我们给点按权值排序贪心从大向小选. 我们要求的显然就是∑i(a[i]−(n−i))" role ...
- 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)
传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果 ...
- 2018.11.08 NOIP模拟 水管(简单构造)
传送门 仔细读题会发现只要所有点点权之和等于0一定有解. 如何构造? 直接当做树来构造就行了,非树边都赋值成0就行. 代码
- 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)
传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. ...
- 2018.10.08 NOIP模拟 栅栏(树状数组+rand)
传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次 ...
- 2018.10.08 NOIP模拟 序列(主席树)
传送门 T2防ak题? 其实也不是很难(考试时sb了). 直接变形一下求出区间长度在[l2,r2][l2,r2][l2,r2]之间,中位数≤l1−1\le l1-1≤l1−1的区间数,和区间长度在[l ...
- 2018.10.08 NOIP模拟 斐波那契(贪心+hash/map)
传送门 签到题. 显然是可以贪心分组的,也就是尽量跟当前的分成一组. 这时我们需要判断a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]a[l]+a[r],a[l+1]+a[r]. ...
随机推荐
- 某C电面记
昨天突然接到某C的电话面试,有点措不及防.15分钟左右的电面后,直接收到了不合适的邮件通知,那个惨~~~~~~~~~~~~~~~ 记录回答得不是很好的几个问题: 1.自动化层面,你做了什么工作,给团队 ...
- Webservice 返回数据集 DataSet 及Android显示数据集LiveBindings
一.服务端 New TSoapDataModule 添加控件 TDataSetProvider,TClientDataSet,TADOQuery,TADOConnection 添加方法 functio ...
- JS 报表制作
1:Echarts, 界面多样化. http://echarts.baidu.com/index.html 2: Jmgraph 工具 简单的画线工具 http://graph.jm47.com/ 3 ...
- air 桌面应用发布后可以删除的文件
****\Adobe AIR\Versions\1.0 下的文件夹Resources,可以整个删除 ***META-INF\AIR目录下的application.xml配置文件可修改initialWi ...
- Excel函数使用
Excel函数使用: count&countif today&now count count() 仅可以统计数字类型的单元格个数 countif 根据条件来选择统计 countif(D ...
- nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) ...
- DataFrame 取值
通过 DataFrame[ ]方式,取得得都是行, [ ] 中,添加过滤条件 data = pd.DataFrame( np.arange(16).reshape(4,4), index=['OP', ...
- 第一个struct2程序(2)
第三步 需要使用ActionForm了.在Struts1.x中,必须要单独建立一个ActionForm类(或是定义一个动作Form),而在Struts2中ActionForm和Action已经二合一了 ...
- homework 补第三题
上次只写了两道题 发现少了一道 所以今天补上 4 . 另外补上今天的程序代码 代码 1. 2. 3 4 运行截图 1. 2 3
- SciTE: 中文字符支持问题
SciTE: 中文字符支持问题 SciTE(Scintilla Text Editor)是一个体积小巧的文本编辑器. 但是它默认的设置对中文字符处理不好,其实只要对它进行相应的配置,就可以了. 1 ...