zoukankan      html  css  js  c++  java
  • PKU1470+LCA

    简单LCA。。。。但是输入的时候很恶心。。。。

    看discuss,改了scanf才过了。。。

     1 /*
     2 LCA
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 #include<map>
    11 #include<math.h>
    12 using namespace std;
    13 typedef long long ll;
    14 //typedef __int64 int64;
    15 const int maxn = 1005;
    16 const int inf = 0x7fffffff;
    17 const double pi=acos(-1.0);
    18 const double eps = 1e-8;
    19 int dis[ maxn ];
    20 int ace[ maxn ],deep[ maxn ],fa[ maxn ];
    21 int res[ maxn ];
    22 struct node{
    23     int u,next;
    24 }edge[ maxn<<4 ];
    25 int cnt,head[ maxn ];
    26 void init(){
    27     memset( res,0,sizeof( res ) );
    28     memset( fa,0,sizeof( fa ) );
    29     cnt = 0;
    30     memset( head,-1,sizeof( head ) );
    31 }
    32 void addedge( int a,int b ){
    33     edge[ cnt ].u = b;
    34     edge[ cnt ].next = head[ a ];
    35     head[ a ] = cnt++;
    36 }
    37 void dfs( int now,int now_father,int now_ace,int now_deep ){
    38     fa[ now ] = now_father;
    39     ace[ now ] = now_ace;
    40     deep[ now ] = now_deep;
    41     for( int i=head[ now ];i!=-1;i=edge[ i ].next ){
    42         int v = edge[ i ].u;
    43         dfs( v,now,now_ace,now_deep+1 );
    44     }
    45 }    
    46 int find( int x,int y ){
    47     if( x==y ) return x;
    48     if( deep[x]>deep[y] ) return find( fa[x],y );
    49     else return find( x,fa[y] );
    50 }
    51 int main(){
    52     int n;
    53     while( scanf("%d",&n)==1 ){
    54         int cur,num,nxt;
    55         init();
    56         for( int i=1;i<=n;i++ ){
    57             scanf("%d:(%d)",&cur,&num);
    58             while( num-- ){
    59                 scanf(" %d",&nxt);
    60                 addedge( cur,nxt );
    61             }
    62         }
    63         for( int i=1;i<=n;i++ ){
    64             if( fa[i]==0 ){
    65                 dfs( i,-1,i,0 );
    66             }
    67         }
    68         int m;
    69         scanf("%d",&m);
    70         //printf("m=%d\n",m);
    71         char ch1[2],ch2[2];
    72         while( m-- ){
    73             scanf("%1s%d%d%1s",ch1,&cur,&nxt,ch2);
    74             int father = find( cur,nxt );
    75             res[ father ]++;
    76         }
    77         //printf("m=%d\n",m);
    78         for( int i=1;i<=n;i++ ){
    79             if( res[i]!=0 ){
    80                 printf("%d:%d\n",i,res[i]);
    81             }
    82         }
    83     }
    84     return 0;
    85 } 
    View Code
  • 相关阅读:
    一文看懂Python匿名函数
    Python数据分析库之pandas,你该这么学!No.1
    探究以太坊 2.0 的分叉选择规则
    Plasma 设计综合列表
    从比特币到 Polkadot
    Ethereum Plasma MVP and Plasma Cash
    Java程序员进阶路线-高级java程序员养成
    matlab混合编程向导(vc,vb,.net...)
    matlab混合编程向导(vc,vb,.net...)
    matlab混合编程向导(vc,vb,.net...)
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3093434.html
Copyright © 2011-2022 走看看