zoukankan      html  css  js  c++  java
  • hdu 3938 Portal

    http://acm.hdu.edu.cn/showproblem.php?pid=3938

    这道题一开始没看懂题意,看了别人的博客之后才理解题意。用的是离线的并查集,输入完之后再处理。问的是在小于等于L的路径数。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 200005
     5 using namespace std;
     6 
     7 int f[maxn],num[maxn];
     8 int n,m,Q;
     9 struct node
    10 {
    11     int a,b,c;
    12     bool operator <(const node &x)const
    13     {
    14         return c<x.c;
    15     }
    16 } p[maxn];
    17 
    18 struct nodeq
    19 {
    20     int id,l;
    21     bool operator <(const nodeq &a)const
    22     {
    23         return l<a.l;
    24     }
    25 } q[maxn];
    26 
    27 int find1(int x)
    28 {
    29     if(x==f[x]) return x;
    30     return f[x]=find1(f[x]);
    31 }
    32 
    33 int merge1(int a,int b)
    34 {
    35     int fa=find1(a);
    36     int fb=find1(b);
    37     if(fa==fb) return 0;
    38     int m1;
    39     m1=num[fa]*num[fb];
    40     num[fa]+=num[fb];
    41     f[fb]=fa;
    42     return m1;
    43 }
    44 
    45 void inti()
    46 {
    47     for(int i=0; i<=n; i++)
    48     {
    49         f[i]=i;
    50         num[i]=1;
    51     }
    52 }
    53 int main()
    54 {
    55     while(scanf("%d%d%d",&n,&m,&Q)!=EOF)
    56     {
    57         inti();
    58         for(int i=0; i<m; i++)
    59         {
    60             scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
    61         }
    62         for(int i=0; i<Q; i++)
    63         {
    64             scanf("%d",&q[i].l);
    65             q[i].id=i;
    66         }
    67         sort(p,p+m);
    68         sort(q,q+Q);
    69         int ans=0,j=0;
    70         int qq[maxn];
    71         for(int i=0; i<Q; i++)
    72         {
    73             while(j<m&&p[j].c<=q[i].l)
    74             {
    75                 ans+=merge1(p[j].a,p[j].b);
    76                 j++;
    77             }
    78             qq[q[i].id]=ans;
    79         }
    80         for(int i=0; i<Q; i++)
    81         {
    82             printf("%d
    ",qq[i]);
    83         }
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    简单批处理内部命令简介(转)
    CPU 内存 频率 DDR DDR2 DDR3
    python 正则表达式
    bat 脚本 > >> 管道
    python 多进程 无数进程 重复进程 死机
    NLP相关期刊和会议
    deamon tools dtsoft virtual cdrom device 失败 错误
    占位
    2011年07月03日的日记
    每周总结(第二周)
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3735566.html
Copyright © 2011-2022 走看看