记录编号 |
590772 |
评测结果 |
EEEEEEEEEE |
题目名称 |
[SYOI 2015] Asm.Def的基本算法 |
最终得分 |
0 |
用户昵称 |
dream |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
2.239 s |
提交时间 |
2024-07-11 12:35:33 |
内存使用 |
3.06 MiB |
显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
- const int N=10005,mod=1e9+7;
- int w[N];
- int n;
- int fa[N];
- int mk[N];
- int cnt;
- int jyh[N][N];
- int read(){
- char c;
- int f=1,sum=0;
- c=getchar();
- while(c<'0'||c>'9'){
- if(c=='-'){
- f=-1;
- }
- c=getchar();
- }
- while(c>='0'&&c<='9'){
- sum=sum*10+c-'0';
- c=getchar();
- }
- return sum*f;
- }
- void add(int x,int y){
- fa[x]=y;
- }
- int lca(int x,int y){
- int flag=0;
- if(x<y){
- swap(x,y);
- flag=1;
- }
- for(int i=1;i<=n;i++){
- mk[i]=0;
- }
- for(int i=x;i!=1;i=fa[i]){
- // cout<<fa[i]<<" ";
- mk[i]=1;
- }
- for(int i=y;i;i=fa[i]){
- if(mk[i]){
- if(!flag){
- jyh[x][y]=i;
- }
- if(flag){
- jyh[y][x]=i;
- }
- return i;
- }
- }
- }
- int main(){
- // freopen("asm_algo.in","r",stdin);
- // freopen("asm_algo.out","w",stdout);
- n=read();
- w[1]=read();
- fa[1]=0;
- for(int i=2;i<=n;i++){
- int p;
- p=read();
- w[i]=read();
- add(i,p);
- }
- int res=0;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++){
- int lcaa;
- if(!jyh[i][j]){
- lcaa=lca(i,j);
- }
- else{
- lcaa=jyh[i][j];
- }
- int ans=1;
- ans*=w[i];
- ans%=mod;
- ans*=w[j];
- ans%=mod;
- ans*=w[lcaa];
- ans%=mod;
- res+=ans;
- res%=mod;
- }
- }
- cout<<res;
- return 0;
- }