zoukankan      html  css  js  c++  java
  • 石头剪刀布

    哇自闭了,一开始用的 pair<int,pair<int,int>>疯狂tle,换成node还是T,发现自己傻逼,就预处理的一下阶乘,然后wa,然后发现手残写错了一个地

    https://www.zhixincode.com/contest/15/problem/I?problem_id=221

     1 #include <bits/stdc++.h>
     2 #define pii pair<int,int>
     3 #define mk(a,b) make_pair(a,b)
     4 using namespace std;
     5 typedef long long ll;
     6 const int N = 2e5+5;
     7 const ll mod = 998244353;
     8 inline int read() {
     9     int X=0,w=1; char c=getchar();
    10     while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    11     while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    12     return X*w;
    13 }
    14 int n,m;
    15 int fa[N],w[N],c[N],ran[N];//父亲,比赛,主场
    16 ll p2[N],p3[N];
    17 void init(){
    18     p2[0]=1;p3[0]=1;
    19     for(int i=1;i<=n;i++){
    20         fa[i]=i;
    21         p2[i]=p2[i-1]*2%mod;
    22         p3[i]=p3[i-1]*3%mod;
    23     }
    24 }
    25 struct node{
    26     int fa,w,c;
    27 };
    28 node find(int x){
    29     if(fa[x]==x) return {fa[x],w[x],c[x]};
    30     int tmp = fa[x];
    31     int rw=w[x],rc=c[x];
    32     while (tmp!=fa[tmp]){
    33         rw+=w[tmp],rc+=c[tmp];
    34         tmp=fa[tmp];
    35     }
    36     rw+=w[tmp],rc+=c[tmp];
    37     return {tmp,rw,rc};
    38 }
    39 void unite(int x,int y){//y挑战x
    40     node xx=find(x),yy=find(y);
    41     if(xx.fa==yy.fa) return;
    42     w[xx.fa]++;w[yy.fa]++;
    43     c[xx.fa]++;
    44     if(ran[xx.fa]<ran[yy.fa]){
    45         fa[xx.fa]=yy.fa;
    46         w[xx.fa]-=w[yy.fa];
    47         c[xx.fa]-=c[yy.fa];
    48     } else{
    49         fa[yy.fa]=xx.fa;
    50         w[yy.fa]-=w[xx.fa];
    51         c[yy.fa]-=c[xx.fa];
    52         if(ran[x]==ran[y])
    53             ran[x]++;
    54     }
    55 }
    56 int main(){
    57     n=read();m=read();
    58     init();
    59     int op,x,y;
    60     while (m--){
    61         op=read();
    62         if(op==1){
    63             x=read();y=read();
    64             unite(x,y);
    65         } else{
    66             x=read();
    67             node tmp = find(x);
    68             printf("%d
    ",p2[tmp.c]*p3[n-tmp.w]%mod);
    69         }
    70     }
    71 }
    View Code
  • 相关阅读:
    占位博客
    占位博客
    占位博客
    占位
    占位
    占位
    占位
    占位
    python字典设置初始值setdefault()与get()
    自然语言处理如何入门
  • 原文地址:https://www.cnblogs.com/MXang/p/10339639.html
Copyright © 2011-2022 走看看