2084. Asm.Def的基本算法
【题目描述】
“有句美国俗语说,如果走起来像鸭子,叫起来像鸭子,那就是一只鸭子。”斯科特·华莱士看着Asm.Def面前屏幕上滚动的绿色字符,若有所思地说。
“什么意思?”
“你的数据。看上去是一棵树。”
“按照保密条令,我什么也不说这是最好的——但见你这么热情,一句话不说也不好。”Asm.Def停下手中的快速数论变换,“确实是树。”
“然后你怎么算出来目标的位置?”
“都需要按照基本算法,按照图论的那一套理论,去产生。听说过LCA吗?不是那个印度飞机,我是说最近公共祖先……”

Asm.Def通过分析无线电信号得到了一棵有n个节点,以1为根的树。除1之外,节点i的父亲是p_i。节点带有权值,节点i的权值是w_i。
我们定义某点的祖先为从根到它路径上的所有点(包括它本身),而两个节点a、b的最近公共祖先是某个点p,使得p同时是a、b的祖先,而且p离根最远。
Asm.Def想要求出

(文字:∑∑w_i*w_j*w_LCA(i,j)),
其中LCA(i,j)是i、j的最近公共祖先,他认为这个值至关重要。由于这个值可能很大,Asm.Def只需要知道它模1,000,000,007(即10^9+7)的结果。
【输入格式】
第1行两个整数:n和w_1.
第2行到第n行,第i行有两个整数p_i和w_i。
【输出格式】
一行一个整数,即答案模1,000,000,007的值。
【样例输入】
2 2
1 1
【样例输出】
17
【提示】
1×1×1+1×2×2+2×1×2+2×2×2=17。
对于30%的数据,n<=100,w_i<=10。
对于60%的数据,n<=1000,w_i<=1000.
对于100%的数据,1<=n<=10^5,0<=w_i<=10^9,1<=p_i<i.
【超时code】
dalao说没事先打暴力,说不定会想出思路,然而并没有。超时4个点。
用define定义的mod一直错 输出1e009...
然后建边时没有建双边....
树剖写错.....
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
//#define mod 1e9
const int mod=1e9+;
int w[],dad[],size[],top[],deep[];
long long ans;
int n,da;
vector<int>vec[];
void dfs1(int x) {
size[x]=;
deep[x]=deep[dad[x]]+;
for(int i=; i<vec[x].size(); i++) {
if(dad[x]!=vec[x][i]) {
dad[vec[x][i]]=x;
dfs1(vec[x][i]);
size[x]+=size[vec[x][i]];
}
}
}
void dfs2(int x) {
if(!top[x])top[x]=x;
int t=;
for(int i=; i<vec[x].size(); i++) {
if(dad[x]!=vec[x][i]&&size[vec[x][i]]>size[t])
t=vec[x][i];
}
if(t) {
// top[t]=x;
top[t]=top[x];
dfs2(t);
}
for(int i=; i<vec[x].size(); i++) {
if(dad[x]!=vec[x][i]&&vec[x][i]!=t)
dfs2(vec[x][i]);
}
}
int lca(int x,int y) {
for(; top[x]!=top[y];) {
if(deep[x]<deep[y])
swap(x,y);
// top[x]=dad[top[x]];
x=dad[top[x]];
}
if(deep[x]<deep[y])return x;
return y;
}
int main() {
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
scanf("%d%d",&n,&w[]);
for(int i=; i<=n; i++) {
scanf("%d%d",&da,&w[i]);
vec[da].push_back(i);
vec[i].push_back(da);//建双向边
}
dfs1();
dfs2();
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
ans=(ans+w[i]*w[j]*w[lca(i,j)])%mod;
cout<<ans<<endl;
return ;
}
【AC code】
一气之下全改成long long 就过了。
【思路】

如图的矩阵表示i,j的lca。发现对角线两侧是对称的(因为i,j的lca==j,i的lca);
那么我们只要求出对角线的一侧的值再*2+对角线上的值就是答案。
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1e9+;
const int maxx=1e5;
struct Edge
{
long long x,y,next;
Edge(int x=,int y=,int next=):
x(x),y(y),next(next){}
}edge[maxx<<];
long long head[maxx+],w[maxx+],sum[maxx+],dad[maxx+];
long long n,sumedge,da;
long long ans;
void add(int x,int y)
{
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
}
void dfs(int x)
{
sum[x]=w[x];
for(long long i=head[x];i;i=edge[i].next)
{
if(!dad[edge[i].y])
{
dad[edge[i].y]=x;dfs(edge[i].y);
ans=(ans%mod+sum[x]%mod*sum[edge[i].y]%mod*w[x]%mod)%mod;
sum[x]=(sum[x]%mod+sum[edge[i].y]%mod)%mod;
}
}
}
int main()
{
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
scanf("%lld%lld",&n,&w[]);
for(long long i=;i<=n;i++)
{
scanf("%d%d",&da,w+i);//not &w+i;
add(da,i);
}
dfs();
ans=ans*%mod;
for(long long i=;i<=n;i++)
ans=(ans%mod+w[i]%mod*w[i]%mod*w[i]%mod)%mod;
printf("%lld\n",ans%mod);
return ;
}
2084. Asm.Def的基本算法的更多相关文章
- cogs——2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句 ...
- COGS 2084. Asm.Def的基本算法
★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句美国俗语说,如果走起来像鸭子,叫起来像 ...
- COGS——T2084. Asm.Def的基本算法
http://cogs.pro/cogs/problem/problem.php?pid=2084 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间 ...
- Asm.Def点大兵
syzoj上的题,收货很多,orz天天学长 原题: Asm.Def奉命组建一支m人的特种作战小队前往圣迭戈.他有n名候选人,可以在其中任意挑选.由于小队中每个人都有独特的作用,所以次序不同的两种选法被 ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...
- COGS2090 Asm.Def找燃料
时间限制:1 s 内存限制:256 MB [题目描述] “听说咱们要完了?”比利·海灵顿拨弄着操纵杆,头也不回地问Asm.Def. “不要听得风就是雨.” “开个玩笑嘛.不就是打机器人,紧张啥,你 ...
- COGS2085 Asm.Def的一秒
时间限制:1 s 内存限制:256 MB [题目描述] “你们搞的这个导弹啊,excited!” Asm.Def通过数据链发送了算出的疑似目标位置,几分钟后,成群结队的巡航导弹从“无蛤”号头顶掠过 ...
- COGS 2091. Asm.Def的打击序列
★★★ 输入文件:asm_lis.in 输出文件:asm_lis.out 简单对比时间限制:4 s 内存限制:256 MB [题目描述] 白色圆柱形的“蓝翔”号在虚空中逐渐变大,一声沉 ...
- COGS 2082. Asm.Def谈笑风生
★ 输入文件:asm_talk.in 输出文件:asm_talk.out 简单对比时间限制:2 s 内存限制:256 MB [题目描述] “人呐都不知道,自己不可以预料,直升机刚一出圣 ...
随机推荐
- RGB颜色空间alpha混合的方法
http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/64454 ...
- OpenCV实现图像颜色特征提取
https://github.com/ictlyh/ImageFeature 链接:http://pan.baidu.com/s/1mhUoPxI 密码:3cnn
- 跟我一起写 Makefile(一)[转]
原文链接 http://bbs.chinaunix.net/thread-408225-1-1.html(出处: http://bbs.chinaunix.net/) 陈皓 概述—— 什么是makef ...
- python学习(十一)函数、作用域、参数
定义和调用函数 在这里函数的定义和调用和一般的语句没什么不一样,感觉函数也是对象 #!/usr/bin/python def times(x, y): # 定义函数 ...
- Spark源码分析之五:Task调度(一)
在前四篇博文中,我们分析了Job提交运行总流程的第一阶段Stage划分与提交,它又被细化为三个分阶段: 1.Job的调度模型与运行反馈: 2.Stage划分: 3.Stage提交:对应TaskSet的 ...
- weblogic宕机crash问题解决分享
近期比較烦躁.系统频繁出现宕机.weblogic控制台打印出例如以下内容: # Afatal error has been detected by the Java Runtime Environme ...
- 安装anaconda及pytorch
安装anaconda,下载64位版本安装https://www.anaconda.com/download/ 官网比较慢,可到清华开源镜像站上下载 环境变量: D:\Anaconda3;D:\A ...
- 基于传统IPC基础上的RTMP互联网推流摄像机方案设计
在我之前的一篇博客<EasyRTMP内置进入摄像机中实现网络推流直播摄像机的功能>中,我阐述了一种将RTMP推流内置到摄像机系统内部,实现安防摄像机转互联网直播的RTMP推流摄像机功能,如 ...
- Asp.net MVC3 异常全局过滤器处理
1.建立异常全局过滤器处理机制,在Gloabal.asax.cs文件中,有如下代码块: public static void RegisterGlobalFilters(GlobalFilterCol ...
- java中随机生成汉字
main方法中使用: //随机生成100个汉字 String ss=""; for(int i=0;i<100;i++){ ss+=getChinese(i); } Syst ...