题解 CF500D 【New Year Santa Network】

简介: 题目链接 这道题首先是要看看该如何化简,先把三元组化成二元组。之后统计经过某条边的 次数权值  的和。最后除以总基数 tot其中,每条边被计算的次数为 子树的点数非子树的点数 (自己想想)然后就没了。

题目链接

这道题首先是要看看该如何化简,先把三元组化成二元组。

之后统计经过某条边的 次数权值  的和。

最后除以总基数 tot


其中,每条边被计算的次数为 子树的点数非子树的点数 (自己想想)

然后就没了。

 ps:一定要注意n个节点的树有n1条边,本宝宝调了一下午+一晚上。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct data{int v;int value;int nxt;}edge[200010];
int alist[100010];int cnt;
void add(int u,int v,int value)
{
    edge[++cnt].nxt=alist[u];
    edge[cnt].v=v;
    edge[cnt].value=value;
    alist[u]=cnt;
}

int len[100010];
int num[100010];
int n,m;
int in[100010];int out[100010];

double ans;double tot;
void dfs(int x,int f)
{
    num[x]=1;
    for(int i=alist[x];i!=-1;i=edge[i].nxt)
    {
        int v=edge[i].v;
        if(v==f) continue;
        dfs(v,x);
        num[x]+=num[v];
        ans+=(double)edge[i].value*num[v]*(n-num[v])/tot;
    }
}

int u,v,value;
int main()
{
    scanf("%d",&n);
    memset(alist,-1,sizeof(alist));
    for(int i=1;i<n;i++)
    {
        scanf("%d%d%d",&u,&v,&value);
        in[i]=u;
        out[i]=v;
        len[i]=value;
        add(u,v,value);
        add(v,u,value);
    }
    tot=(double)n*(n-1)/6.0;
    dfs(1,-1);
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&u,&v);
        value=min(num[in[u]],num[out[u]]);
        ans-=(double)(len[u]-v)*value*(n-value)/tot;
        len[u]=v;
        printf("%.8lf\n",ans);
    }
    return 0;
}

 

目录
打赏
0
0
0
0
6
分享
相关文章
【PAT甲级 - C++题解】1106 Lowest Price in Supply Chain
【PAT甲级 - C++题解】1106 Lowest Price in Supply Chain
126 0
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
【PAT甲级 - C++题解】1145 Hashing - Average Search Time
102 0
LeetCode 202. Happy Number
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
135 0
LeetCode 202. Happy Number
HDOJ(HDU) 1562 Guess the number(水题,枚举就行)
HDOJ(HDU) 1562 Guess the number(水题,枚举就行)
137 0
LeetCode---Problem6 ZigZag Conversion
ZigZag问题思路。代码整洁并不一定执行速度就好~
811 0