首页 > 其他分享 >省选武汉联测 13 题解

省选武汉联测 13 题解

时间:2023-03-28 15:03:29浏览次数:41  
标签:rt 13 return rs 省选 题解 int include find

省选模拟赛俩构造一交互挺 nm 逆天。赛后题解区就一句 Surprise!!! 没题解也挺 nm 逆天。那建议组题人的马先消失一下。

这时候就体现学长博客的重要性了。搜关键词搜到三个:yspm,房屋,Max。膜拜以上大师。

然后犇犇里在倡议把某人踢出歌单。保持中立。

构树

签到题。\(O(n^2)\) 枚举点,能连就连。容易证明贪心是对的。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int n,fa[1010],a[1010],b[1010];
int g[1010][1010];
vector<pair<int,int> >v;
int find(int x){
    return x==fa[x]?fa[x]:fa[x]=find(fa[x]);
}
void merge(int x,int y){
    g[x][y]=g[y][x]=1;
    if(x>y)swap(x,y);
    if(find(x)==find(y))return;
    v.push_back(make_pair(x,y));
    fa[find(x)]=find(y);
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)fa[i]=i;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i],&b[i]);
        if((find(a[i])==find(i)&&!g[a[i]][i])||(find(b[i])==find(i)&&!g[b[i]][i])){
            puts("-1");return 0;
        }
        merge(i,a[i]),merge(i,b[i]);
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(find(i)==find(j))continue;
            if(a[i]<=j&&j<=b[i]&&a[j]<=i&&i<=b[j])merge(i,j);
        }
    }
    if(v.size()!=n-1){
        puts("-1");return 0;
    }
    for(pair<int,int>p:v)printf("%d %d\n",p.first,p.second);
    return 0;
}

交互

赛时读错题了。怎么读错的和你一样。问了一圈一车读错的。

读对题了其实好像不难。

首先显然 \(1\) 号节点没左儿子。设确定了 \(1\sim i-1\) 节点的子树,那么对于 \(i\) 节点:

  1. 有右儿子:此时知道左端点是自己,向下递归。
  2. 没有右儿子:知道了所有的左边子树,那么可以直接连上左儿子返回这个子树。

代码很短。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include "interact.h"
using namespace std;
int solve(int rt,int L,int &R){
    R=rt;
    if(query(rt,L,R))return rt;
    for(int ls=0,rs;;ls=rs){
        rs=solve(R+1,rt+1,R);
        if(ls)report(ls,rs);
        if(query(rt,L,R)){
            report(rt,rs);
            return rt;
        }
    }
}
void guess(int n){
    int R=0;
    for(int ls=0,rs;R<n;ls=rs){
        rs=solve(R+1,1,R);
        if(ls)report(ls,rs);
    }
}

构图

场上就嗯想不到。还是菜的真实。

枚举度数 \(k\) 的点的个数,然后贪心往后连度数最小的点。剩下的度数不是 \(k\) 的点如果度数不到 \(k+1\) 就内部连边。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int n,k,d[1010];
vector<pair<int,int> >g;
queue<int>q;
void solve(int i){
    vector<pair<int,int> >ret;
    for(int j=i+1;j<=n;j++)q.push(j),d[j]=0;
    for(int j=1;j<=i;j++){
        for(int cnt=1;cnt<=k;cnt++){
            int x=q.front();q.pop();d[x]++;q.push(x);
            ret.push_back(make_pair(x,j));
        }
    }
    while(!q.empty()){
        int x=q.front();q.pop();
        if(d[x]+q.size()<=k)return;
        while(d[x]<=k){
            int y=q.front();q.pop();
            d[x]++;d[y]++;q.push(y);
            ret.push_back(make_pair(x,y));
        }
    }
    if(g.empty()||ret.size()<g.size())swap(g,ret);
}
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n-k;i++)solve(i);
    printf("%d\n",(int)g.size());
    for(pair<int,int>p:g)printf("%d %d\n",p.first,p.second);
    return 0;
}

标签:rt,13,return,rs,省选,题解,int,include,find
From: https://www.cnblogs.com/gtm1514/p/17265152.html

相关文章

  • Conda in Windows under MSYS2 and Zsh 的问题解决
    CondainWindowsunderMSYS2andZsh的问题解决在Window11上使用gitbash安装zsh,并配置p10k主题,主要问题就是prompt中无法显示condaenv;condaactivate/deactivate......
  • 【题解】[SDOI/SXOI2022] 小 N 的独立集(dp of dp)
    题目分析:就借助这个题稍微说一下\(dp\)套\(dp\)。对于\(dp\)套\(dp\)其解决的问题是:若给定某一具体情况则答案十分好求,现要求对于所有的情况的答案进行统计。这......
  • Gourmet choice CF1131D
    给你对于任意一个ai,bj的大小关系的判断,让你构造a,b序列满足条件。无解输出No 拓扑排序+并查集 #include<iostream>#include<cstring>#include<queue>usi......
  • 13:SwiftUI-slider滑块
      正文////SliderPage.swift//SwiftUIDeom////Createdbyzhoukang03on2023/3/28.//importSwiftUIstructSliderPage:View{@Statevarrat......
  • [BZOJ3331][BeiJing2013]压力
    #include<iostream>#include<cmath>#include<algorithm>#include<cstring>#include<cstdio>#include<vector>usingnamespacestd;vector<int>temp[5211314],b......
  • 级联pwm整流器(级联H桥CHB)(单相交流220V-直流135*3整流)仿真,动稳态性能良好
    级联pwm整流器(级联H桥CHB)(单相交流220V-直流135*3整流)仿真,动稳态性能良好,0.5s切换不平衡负载,0.6s启动直流电压均衡控制,附带仿真介绍文档,详细讲述仿真搭建过程,并附带参考文献......
  • macOS Ventura 13.3 (22E252) 正式版发布,ISO、IPSW、PKG 下载
    macOSVentura13正式版现已发布!请访问原文链接:https://sysin.org/blog/macOS-Ventura/,查看最新版。原创作品,转载请保留出处。2023年3月27日(北京时间28日凌晨),m......
  • 【题解】[HNOI2007]梦幻岛宝珠
    题目分析:对于这种某一个值很大另一个值很小的背包题,就是要求找特殊性质。既然每一个\(w\)都可以写成\(a\times2^b\)的性质,就可以对于每一个\(b\)单独做背包,这样......
  • 【题解】[APIO2010] 信号覆盖
    题目分析:其实就是涉及四个点之间的位置关系,三个点形成圆判断是否包含另一个点。考虑四个点之间形成的多边形只可能是凸四边形或者是凹四边形,如下图所示:(上图为凸多边形)......
  • 【题解】Atcoder ABC295 A-G
    A.ProbablyEnglish题目分析:直接每一个单词判一下就好了。代码:点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn;scanf("%d",&n); bo......