COGS——T2084. Asm.Def的基本算法
http://cogs.pro/cogs/problem/problem.php?pid=2084
★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比
时间限制:1 s 内存限制:256 MB
【题目描述】
“有句美国俗语说,如果走起来像鸭子,叫起来像鸭子,那就是一只鸭子。”斯科特·华莱士看着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.
裸LCA只能拿60分后面就超时了
#include <algorithm>
#include <cstdio> #define mod 1000000007 using namespace std; const int N(1e6+);
int n,x,ans,w[N],a[N]; int sumedge,head[N];
struct Edge
{
int from,to,next;
Edge(int from=,int to=,int next=):from(from),to(to),next(next){}
}edge[N];
void ins(int from,int to)
{
edge[++sumedge]=Edge(from,to,head[from]);
head[from]=sumedge;
} int deep[N],size[N],dad[N],top[N];
void DFS(int x)
{
deep[x]=deep[dad[x]]+;size[x]=;
for(int i=head[x];i;i=edge[i].next)
{
int to=edge[i].to;
if(dad[x]!=to)
dad[to]=x,DFS(to),size[x]+=size[to];
}
}
void DFS_(int x)
{
int t=;if(!top[x]) top[x]=x;
for(int i=head[x];i;i=edge[i].next)
{
int to=edge[i].to;
if(dad[x]!=to&&size[t]<size[to]) t=to;
}
if(t) top[t]=top[x],DFS_(t);
for(int i=head[x];i;i=edge[i].next)
{
int to=edge[i].to;
if(dad[x]!=to&&t!=to) DFS_(to);
}
} int LCA(int x,int y)
{
for(;top[x]!=top[y];x=dad[top[x]])
if(deep[top[x]]<deep[top[y]]) swap(x,y);
return deep[x]>deep[y]?y:x;
} 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",&x,w+i),ins(i,x),ins(x,i);
DFS(); DFS_();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
ans=(ans%mod+(w[i]*w[j]*w[LCA(i,j)])%mod)%mod;
printf("%d",ans);
return ;
}
AAAAAATTTT
#include <algorithm>
#include <cstdio> #define mod 1000000007
#define LL long long using namespace std; const LL N(1e5+);
LL n,x,w[N]; LL sumedge,head[N];
struct Edge
{
LL from,to,next;
Edge(LL from=,LL to=,LL next=):from(from),to(to),next(next){}
}edge[N];
void ins(LL from,LL to)
{
edge[++sumedge]=Edge(from,to,head[from]);
head[from]=sumedge;
} LL sum[N],dad[N],ans;
void DFS(LL x)
{
sum[x]=w[x];
for(LL i=head[x];i;i=edge[i].next)
{
LL to=edge[i].to;
if(!dad[to])
{
dad[to]=x; DFS(to);
ans=(ans%mod+sum[x]%mod*sum[to]%mod*w[x]%mod)%mod;
sum[x]=(sum[x]%mod+sum[to]%mod)%mod;
}
}
} int main()
{
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
scanf("%lld%lld",&n,&w[]);
for(LL i=;i<=n;i++)
scanf("%lld%lld",&x,w+i), ins(x,i);
DFS(); ans=ans%mod*%mod;
for(LL i=;i<=n;i++)
ans=(ans%mod+w[i]%mod*w[i]%mod*w[i]%mod)%mod;
printf("%lld",ans%mod);
return ;
}
AAAAAAAAAA
COGS——T2084. 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 [题目描述] “有句美国俗语说,如果走起来像鸭子,叫起来像 ...
- 2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 传送门 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...
- COGS——C2098. Asm.Def的病毒
http://www.cogs.pro/cogs/problem/problem.php?pid=2098 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out ...
- cogs——2098. Asm.Def的病毒
2098. Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就 ...
- 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 [题目描述] “人呐都不知道,自己不可以预料,直升机刚一出圣 ...
- COGS 2098. Asm.Def的病毒
★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “这就是我们最新研制的,世界上第一种可持 ...
- cogs 2098. [SYOI 2015] Asm.Def的病毒 LCA 求两条路径是否相交
2098. [SYOI 2015] Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 M ...
随机推荐
- Url 简单讲解
eg: http://sb.test.com/login?name=liming&password=twotigers 协议 http https ftp 域名 sb.test.com 则是域 ...
- sudo不用在输入密码
在任意的路径之下执行:sudo visudo 的命令对文件进行修改: 其中的: sudo ALL=(ALL) %admin ALL=(ALL) 这两个语句为: sudo ALL=(ALL) NOPAS ...
- UVA-1347 Tour 动态规划 难以确定的状态
题目链接:https://cn.vjudge.net/problem/UVA-1347 题意 给出按x坐标排序的几个点. 欲从最左边不回头的走到最右边,然后再返回最左边. 每个点都要被访问,且只能经过 ...
- [HAOI2016]找相同字符(SAM+DP)
感觉很水. 因为SAM上一个点的子树大小代表这个点所表示子串的出现次数. 建出广义后缀自动机之后.在\(parent\)树上跑\(DP\),维护\(size[i][1]\),和\(size[i][0] ...
- redis 多实例监控
1.制作redis_low_discovery.sh脚本 mkdir -p /data/service/script/zabbix cd /data/service/script/zabbix cat ...
- 二叉排序树(B-Tree)-c实现
这个二叉排序树写完了,虽然还有些bug,但还是很高兴的. 主要实现二叉排序树的构建.(*表示稍微重要点) 二叉排序树的打印. 二叉排序树的删除. 代码里的三种情况都测了 顺便附送一个简单的中序遍历,递 ...
- 《virtual san 最佳实践》节选 Virtual SAN的发展与现状
Virtual SAN的发展与现状Virtual SAN已经迭代更新到第四代,即Virtual SAN 6.2.通过三次主版本迭代,Virtual SAN已经成为一款非常成熟的软件定义存储软件.在此, ...
- openssh 升级到7.5p1
1. 参照: http://www.cnblogs.com/xiegj/p/5669800.html http://blog.csdn.net/u011080082/article/details/5 ...
- gps 地图
http://www.cnblogs.com/sylvanas2012/p/5342530.html http://blog.csdn.net/ma969070578/article/details/ ...
- HDU 3108 Ant Trip
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...