• 米特运输


    精度BOOM,然而可以用对数的性质把乘法罗成加法

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define esp 1e-6
     5 #define inf 0x3f3f3f3f
     6 #define maxn 500005
     7 int cnt,v[maxn<<1],next[maxn<<1],first[maxn];
     8 int du[maxn],q[maxn];
     9 double a[maxn],dist[maxn];
    10 
    11 void add(int st,int end){
    12     v[++cnt]=end;
    13     next[cnt]=first[st];
    14     first[st]=cnt;
    15 }
    16 void bfs(){
    17     int head=0,tail=0;
    18     q[++tail]=1;
    19     while(head<tail){
    20         int x=q[++head];
    21         double tmp=log(du[x]);
    22         for(int e=first[x];e;e=next[e]){
    23             dist[v[e]]=dist[x]+tmp;
    24             q[++tail]=v[e];
    25         }
    26     }
    27 }
    28 int main(){
    29     int n;
    30     scanf("%d",&n);
    31     for(int i=1;i<=n;i++){
    32         scanf("%lf",&a[i]);
    33         a[i]=log(a[i]);
    34     }
    35     for(int i=1;i<n;i++){
    36         int x,y;
    37         scanf("%d%d",&x,&y);
    38         add(x,y),du[x]++;
    39     }
    40     bfs();
    41     for(int i=1;i<=n;i++)
    42         a[i]+=dist[i];
    43     sort(a+1,a+1+n);
    44     int ans=inf,sum=1;
    45     for(int i=2;i<=n;i++){
    46         if(a[i]-a[i-1]<esp)sum++;
    47         else {
    48             ans=min(ans,n-sum);
    49             sum=1;
    50         }
    51     }
    52     ans=min(ans,n-sum);
    53     printf("%d
    ",ans);
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    Android开发环境搭建
    Noi 2016
    [二分图&最小割]
    [BZOJ 3145][Feyat cup 1.5]Str 解题报告
    [动态图]
    [组合数取模][中国剩余定理]
    [BZOJ 4436][Cerc2015]Kernel Knights
    [NOI 2014]做题记录
    [线段树合并]
    [树套树模板]
  • 原文地址:https://www.cnblogs.com/Ngshily/p/5099438.html
Copyright © 2020-2023  润新知