COGS 2084. Asm.Def的基本算法
★☆ 输入文件: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.
【来源】
在此键入。
Tarjan法求lca我认为是可以过的
但是需要的数组开不下 数组需要 100000*99999/2 这么大 三个
开不下
#include <ctype.h>
#include <cstdio>
#include <vector>
#define mod 1000000007
#define N 150000
using namespace std;
vector<int>edge[N];
vector<int>q[N];
inline void read(int &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
}
int y,Answer,u[N<<],v[N<<],ans[N<<],num,n,dep[N],fa[N],dad[N],w[N];
int find_(int x) {return x==fa[x]?x:fa[x]=find_(fa[x]);}
void dfs(int x)
{
fa[x]=x;
for(int i=;i<edge[x].size();i++)
if(dad[x]!=edge[x][i]) dad[edge[x][i]]=x,dfs(edge[x][i]);
for(int i=;i<q[x].size();i++)
if(dad[y=u[q[x][i]]^v[q[x][i]]^x]) ans[q[x][i]]=(w[find_(y)]*)%mod;
fa[x]=dad[x];
}
int main()
{
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
read(n);
read(w[]);
Answer=(Answer%mod+((w[]%mod)*(w[]%mod)*(w[]%mod)%mod))%mod;
for(int p,i=;i<=n;i++)
{
read(p);
read(w[i]);
Answer=(Answer%mod+((w[i]%mod)*(w[i]%mod)*(w[i]%mod)%mod))%mod;
edge[i].push_back(p);
edge[p].push_back(i);
}
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
u[++num]=i;
v[num]=j;
q[u[num]].push_back(num);
q[v[num]].push_back(num);
}
}
dfs();
for(int i=;i<=num;i++) Answer=(Answer%mod+((ans[i]%mod)*(w[u[i]]%mod)*(w[v[i]]%mod)%mod))%mod;
printf("%d\n",Answer);
return ;
}
TarjanLCA
#include <ctype.h>
#include <cstdio>
#include <vector>
#define mod 1000000007
#define N 200005
using namespace std;
typedef long long LL;
vector<LL>edge[N]; inline void read(LL &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
}
LL sum[N],ans,n,w[N],siz[N],dep[N],dad[N],top[N];
void dfs(LL x)
{
sum[x]=w[x];
for(LL i=;i<edge[x].size();++i)
{
LL v=edge[x][i];
if(dad[x]!=v)
{
dad[v]=x;
dfs(v);
ans=(ans%mod+sum[x]%mod*sum[v]%mod*w[x]%mod)%mod;
sum[x]=(sum[x]%mod+sum[v]%mod)%mod;
}
}
}
int main()
{
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
read(n);
read(w[]);
for(LL p,i=;i<=n;++i)
{
read(p);
read(w[i]);
edge[p].push_back(i);
edge[i].push_back(p);
}
dfs();
ans=ans%mod*%mod;
for(int i=;i<=n;++i) ans=(ans%mod+w[i]%mod*w[i]%mod*w[i]%mod)%mod;
printf("%lld\n",ans%mod);
return ;
}
COGS 2084. Asm.Def的基本算法的更多相关文章
- cogs——2084. Asm.Def的基本算法
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——T2084. Asm.Def的基本算法
http://cogs.pro/cogs/problem/problem.php?pid=2084 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间 ...
- 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 ...
随机推荐
- IReport制作报表——日期时间显示格式
转自:https://blog.csdn.net/linglinglu/article/details/9022679?utm_source=blogxgwz2 IReport工具在制作报表的时候,会 ...
- web面试常见问题补充
jquery Ajax $ajax({ Url:”test.html”,-----发送请求的地址 Async:true;------异步操作 Cache:true,-----可以从缓冲中加载 Type ...
- 1.6-1.8 HBase表的物理模型
一.HBase 物理模型 1. 1.Table中的所有行都按照row key的字典序排列: 2.Table在行的方向上分割为多个Region: 3.Region按天小分割的,每个表开始只有一个regi ...
- Mac中自定义文件夹中文名
在OSX系统中,我们打开finer,就会看到很多中文名的文件夹,比如“应用程序”.“桌面”等等,而在系统中都是以英文命名的.我们也可以自己去设置中文名. 首先需要找到设置中文的字符串资源文件,路径是/ ...
- myeclipse 去掉spring特性支持
myeclipse10.0 去掉spring支持 手工修改工程目录下的.project文件中相关的内容 删除<nature>com.genuitec.eclipse.springfram ...
- DLL中加载其它DLL使用LoadLibrary加载动态库失败的解决办法
方式一 采用LoadLibraryEx 若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载.但若调用的DLL内部又调用另外一个DLL,此时调用 ...
- BZOJ3289【莫队算法+树状数组+离散化】
思路: 区间逆序数即是交换次数. 逆序数,可以用树状数组吧. 怎么处理区间变换的时候求逆序数啊.. 这里分成左边的增/删,右边的增/删 因为是按时序插入, 所以左边增,增一个数,计算:ans+=sun ...
- [Xcode 实际操作]八、网络与多线程-(16)使用网址会话对象URLSession下载图片并显示下载进度
目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession显示下载图片的进度. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模式 ...
- TensorFlow 模型保存/载入
我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来.tensorflow保存模型的方式与sklearn不太一样,sklearn很直接,一个sklearn.externals.jobl ...
- Codeforces 1139F(树状数组+扫描线)
题目传送 做法 对于每个人,inc为x,pref为y:对于每道菜,p和s为x,b为y 于是根据题意有\[p[i]<=x<=s[i]\]\[p[i]+b[i]<=x+y\]\[p[i] ...