比赛 |
“Asm.Def战记之太平洋”杯 |
评测结果 |
AWWWTTTEEE |
题目名称 |
Asm.Def的基本算法 |
最终得分 |
10 |
用户昵称 |
momo123 |
运行时间 |
5.789 s |
代码语言 |
C++ |
内存使用 |
172.29 MiB |
提交时间 |
2015-11-02 11:32:26 |
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
int w[100005],a,n;
int dist[5000][5000];
int pre[5000][5000];
int minn,ww;
long long ans;
int cnt;
void print(int x)
{
if(pre[a][x]==0)
return;
minn=min(minn,pre[a][x]);
print(pre[a][x]);
}
int main()
{
freopen("asm_algo.in","r",stdin);
freopen("asm_algo.out","w",stdout);
cin>>n>>ww;
w[1]=ww;
memset(dist,0x7f,sizeof(dist));
memset(pre,0,sizeof(pre));
for(int i=2;i<=n;i++)
{
int pp,qq;
cin>>pp>>qq;
w[i]=qq%1000000007;
dist[i][pp]=1;
dist[pp][i]=1;
pre[i][pp]=i;
pre[pp][i]=pp;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&j!=k&&k!=i)
if(dist[i][j]>dist[i][k]+dist[k][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
pre[i][j]=pre[k][j];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
minn=min(i,j);
a=i;
print(j);
ans+=w[i]*w[j]*w[minn]%1000000007;
}
ans%=1000000007;
cout<<ans;
}