zoukankan      html  css  js  c++  java
  • Codeforces Round #544 (Div. 3) D F1 F2

    题目链接:D. Zero Quantity Maximization

    #include <bits/stdc++.h>
    using namespace std;
    #define maxn 200005
    #define LL long long
    #define pii pair<LL,LL>
    map<pair<LL,LL>,LL>mp,mpp;
    LL a[maxn],b[maxn];
    LL gcd(LL a,LL b){
        return b?gcd(b,a%b):a;
    }
    int main(){
       LL n;
       scanf("%lld",&n);
       for(LL j=0;j<n;j++){
          scanf("%lld",&a[j]);
       }
       for(LL k=0;k<n;k++){
          scanf("%lld",&b[k]);
       }
       LL mx = 0,ans = 0;
       for(LL j=0;j<n;j++){
          LL z = gcd(abs(a[j]),abs(b[j]));
          if(b[j]<0){
             a[j] = -a[j];
             b[j] = -b[j];
          }
          if(a[j]==0){
             if(b[j]==0) ans++;
             continue;
          }
          if(b[j]==0){
               mp[make_pair(1LL*0,1LL*0)]++;
               mx = max(mx, mp[make_pair(1LL*0,1LL*0)]);
               continue;
          }
          mp[make_pair(a[j]/z,b[j]/z)]++;
          mx = max(mx, mp[make_pair(a[j]/z,b[j]/z)]);
       }
       printf("%lld
    ",mx+ans);
    }

     F1: Spanning Tree with Maximum Degree

    判断一下 bfs 就ok

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 200005
    #define LL long long
    vector<int>q[maxn];
    int fa[maxn];
    bool flag[maxn];
    void bfs(int u){
        queue<int>Q;
        Q.push(u);
        while(!Q.empty()){
            u = Q.front();
            Q.pop();
            for(int j=0;j<q[u].size();j++){
                int v = q[u][j];
                if(!flag[v]){
                    flag[v] = 1;
                    Q.push(v);
                    printf("%d %d
    ",u,v);
                }
            }
        }
    }
    int main(){
        memset(fa,0,sizeof(fa));
        memset(flag,0,sizeof(flag));
        int n,m,mx=0,in=-1;
        scanf("%d%d",&n,&m);
        for(int j=0;j<m;j++){
           int u,v;
           scanf("%d%d",&u,&v);
           q[u].push_back(v);
           q[v].push_back(u);
           fa[u]++;
           fa[v]++;
           if(mx<fa[u]){
              mx = fa[u];
              in = u;
           }
           if(mx<fa[v]){
              mx = fa[v];
              in = v;
           }
        }
    //    cout<<in<<endl;
        flag[in] = 1;
        bfs(in);
    }

     F2 :F2. Spanning Tree with One Fixed Degree

    先判断 节点的度够不够  不够直接 输出 NO

    dfs 判断1有多少个连通块 如果连通块数量 大于d 直接输出NO

    最后 添加 在 1 节点添加 d-连通块个数个 点   bfs

    #include <bits/stdc++.h>
    using namespace std;
    #define maxn 200005
    #define LL long long
    #define pii pair<int,int>
    vector<int>q[maxn],z;
    vector<pii>lis;
    bool fa[maxn];
    int n,m,d;
    void dfs(int u){
        for(int j=0;j<q[u].size();j++){
            int v = q[u][j];
            if(!fa[v]){
                fa[v] = 1;
                dfs(v);
            }
        }
    }
    bool bfs(int u){
        queue<int>Q;
        int sum = 0;
        Q.push(u);
        while(!Q.empty()){
            u = Q.front();
            Q.pop();
            for(int j=0;j<q[u].size();j++){
                int v = q[u][j];
                if(!fa[v]){
                    fa[v] = 1,sum++;
                    Q.push(v);
                    //cout<<u<<" "<<v<<endl;
                    lis.push_back(make_pair(u,v));
                    if(u==1){
                        d--;
                        if(d==0) break;
                    }
                }
            }
        }
        //cout<<sum<<" "<<n-1<<endl;
        if(sum!=(n-1)) return 0;
        return 1;
    }
    int main(){
        scanf("%d%d%d",&n,&m,&d);
        memset(fa,0,sizeof(fa));
        int sum = 0;
        for(int j=0;j<m;j++){
            int u,v;
            scanf("%d%d",&u,&v);
            q[u].push_back(v);
            q[v].push_back(u);
            if(u==1||v==1) sum++;
        }
        if(sum<d){
            printf("NO
    ");
            return 0;
        }
        fa[1]=1;
        set<int>se;
        for(int j=0;j<q[1].size();j++){
            int v = q[1][j];
            if(!fa[v]){
                fa[v]=1;
                se.insert(v);
                dfs(v);
            }
        }
        //cout<<se.size()<<endl;
        if(se.size()>d){
            printf("NO
    ");
            return 0;
        }
        //cout<<*se.begin()<<endl;
        for(int j=0;j<q[1].size()&&se.size()<d;j++){
            se.insert(q[1][j]);
        }
    
        q[1].clear();
        for(auto &i:se){
            //cout<<i<<endl;
            q[1].push_back((int)i);
        }
        memset(fa,0,sizeof(fa));
        fa[1] = 1;
        bfs(1);
        printf("YES
    ");
        for(int j=0;j<lis.size();j++){
            pii pa = lis[j];
            printf("%d %d
    ",pa.first,pa.second);
        }
    }
  • 相关阅读:
    软件质量保证体系是什么&#160;国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    软件测试分为几个阶段&#160;各阶段的测试策略和要求是什么?
    BUG管理工具的跟踪过程(用BugZilla为例子)
    多线程
    设计模式
    一个简单的layui登陆界面
    反射技术
    Win10繁体——简体
    Vue学习—组件的学习
    IDEA 相关问题
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/10553803.html
Copyright © 2011-2022 走看看