zoukankan      html  css  js  c++  java
  • E. You 题解(思维)

    题目链接

    题目思路

    懒得口胡了,官方题解写的很好,仔细看下应该就懂了

    题目还是很妙的

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> pii;
    #define fi first
    #define se second
    #define debug printf("aaaaaaaaaaa\n");
    const int maxn=2e5+5,inf=0x3f3f3f3f,mod=998244353;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    const double eps=1e-7;
    int n,ok;
    int head[maxn],cnt=0;
    int dp[maxn];
    struct edge{
        int to,next;
    }e[maxn<<2];
    void add(int u,int v){
        e[++cnt]={v,head[u]};
        head[u]=cnt;
    }
    ll ans[maxn];
    void dfs(int u,int fa,int k){
        if(!ok) return ;
        for(int i=head[u];i;i=e[i].next){
            if(e[i].to^fa){
                dfs(e[i].to,u,k);
            }
        }
        if(u!=1){
            // 判断u和fa边给u还是给fa
            if(dp[u]%k==0){
                dp[fa]++;
            }else{
                dp[u]++;
                if(dp[u]%k!=0){
                    ok=0;
                }
            }
        }
    }
    int main(){
        int _;cin>>_;
        while(_--){
            cin>>n;
            cnt=0;
            for(int i=1;i<=n;i++){
                ans[i]=head[i]=0;
            }
    
            for(int i=1,u,v;i<=n-1;i++){
                cin>>u>>v;
                add(u,v),add(v,u);
            }
            ans[1]=1;
            for(int i=1;i<=n-1;i++){
                ans[1]=2*ans[1]%mod;
            }
            for(int i=2;i<=n-1;i++){
                if((n-1)%i==0){
                    ok=1;
                    for(int j=1;j<=n;j++){
                        dp[j]=0;
                    }
                    dfs(1,1,i);
                    ans[i]=ok;
                }
            }
            for(int i=n-1;i>=1;i--){
                for(int j=i+i;j<=n-1;j+=i){
                    ans[i]=((ans[i]-ans[j])%mod+mod)%mod;
                }
            }
            for(int i=1;i<=n;i++){
                cout<<ans[i]<<" ";
            }
            cout<<'\n';
        }
        return 0;
    }
    ////aaa
    
    
    不摆烂了,写题
  • 相关阅读:
    A Summaryof JDBC
    Chinese Messy Code of String
    Use Spring @Scheduled To Achieve Timing Task
    关于拦截器实现日志存储到db的代码调试
    Java Web指导方向
    错误The request sent by the client was syntactically incorrect ()的解决
    jdbc实现简单的增删改查
    连接oracle jdbc
    关键路径求解算法
    <form> 标签的entype属性
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15079367.html
Copyright © 2011-2022 走看看