首页 > 其他分享 >2024杭电多校第6场 1002.造花(困难版)

2024杭电多校第6场 1002.造花(困难版)

时间:2024-08-06 11:51:36浏览次数:15  
标签:杭电多校 non1 int all1 2024 ++ 造花 cnt1 deg

1002

提供一种不同于正解的做法

重新定义菊花图:

菊花图首先是一棵树,其次存在一个点,它指向的点的度数都为1,剩下的都是度数为1的点。

那么在枚举删去某个点u时,只需要:

1.给u的邻点的度数-1(deg[u]--)

2.维护当前度数不为1的点的个数(代码里的non1)

3.维护 指向的点都为1度点的 点的个数(代码里的all1),实现时多开了一个cnt1[ ]表示某个点指向的1度点的个数,如果cnt1[u]==deg[u]且deg[u]>1,则该点是菊花图中心。

4.判定当前剩下的图是否为菊花图需要:all1==non1(说明度数不为1的点都是菊花图中心,则整个图一定是若干个菊花图)

实现时还有一些细节:

1.如果原图本来就是菊花图,把所有点都输出

2.如果原图有两个及两个以上的连通块不是菊花图,则无解

3.原图只有一个连通块不是菊花图,其他都是,这种情况有解,但要注意在枚举删去的点时,要把其他连通块里的点ban掉。

#include<bits/stdc++.h>
using namespace std;
const int N =2e5+5;
int n,m,cnt=0,tot=0,mx=0,deg[N],vis[N],cnt1[N];
vector<int>e[N];
void dfs(int u,int p){
    cnt++;
    vis[u]=1;
    tot+=e[u].size();
    mx=max(mx,(int)e[u].size());
    for(auto v:e[u]){
        if(vis[v]) continue;
        dfs(v,u);
    }
}
int example;
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        deg[i]=0;
        cnt1[i]=0;
        vis[i]=0;
        e[i].clear();
    }
    for(int i=1,u,v;i<=m;i++){
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
        deg[u]++,deg[v]++;
    }
    int G=0,pos=-1;
    for(int i=1;i<=n;i++){
        if(!vis[i]){
            cnt=0,tot=0,mx=0;
            dfs(i,0);
            if( cnt-1==tot/2 && mx==cnt-1) {}// 判断是否是菊花图
            else {
                G++;pos=i;
            }
        }
    }
    
    if(G>=2){
        cout<<-1<<"\n";
        return;
    }
    else if(G==1){
        for(int i=1;i<=n;i++) vis[i]=0;
        dfs(pos,0);
        
        set<int>s;
        int non1=0,all1=0;
        for(int i=1;i<=n;i++){
            if(!vis[i]) continue;
            if(deg[i]>1) non1++;
            for(auto v:e[i]){
                if(e[v].size()==1) cnt1[i]++;
            }
            if(cnt1[i]==(int)e[i].size()) all1++;
        }
        for(int i=1;i<=n;i++){
            if(!vis[i]) continue;
            for(auto v:e[i]){
                deg[v]--;
            }
            int add_all1=0;
            int add_non1=0;
            if(e[i].size()>1) add_non1=-1;
            set<int>newG;
            for(auto v:e[i]){
                if(deg[v]==1){
                    for(auto to:e[v]){
                        if(to==i) continue;
                        cnt1[to]++;
                        if(cnt1[to]==deg[to]&&deg[to]>1) newG.insert(to);
                    }
                    add_non1--;
                }
                else {
                    if(cnt1[v]==deg[v]&&deg[v]>1) newG.insert(v);
                }
            }
            add_all1=newG.size();
            if(all1+add_all1==non1+add_non1) s.insert(i);
            for(auto v:e[i]) {
                deg[v]++;
                if(deg[v]==2){
                    for(auto to:e[v]){
                        if(to==i) continue;
                        cnt1[to]--;
                    }
                }
            }
        }
        if(s.size()==0) cout<<-1<<"\n";
        else {
            for(auto v:s) {
                if(v!=(*s.rbegin()))cout<<v<<" ";
                else cout<<v;
            }
            cout<<"\n";
        }
    }
    else {
        for(int i=1;i<=n;i++) {
            if(i!=n) cout<<i<<" ";
            else cout<<i;
        }
        cout<<"\n";
    }
}
int main(){
//    freopen("1002.in","r",stdin);
//    freopen("lys.out","w",stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        example++;
        solve();
    }
}
/*
9 6
5 4
6 4
4 9
8 7
7 9
7 2
*/

 

标签:杭电多校,non1,int,all1,2024,++,造花,cnt1,deg
From: https://www.cnblogs.com/liyishui2003/p/18344862

相关文章

  • 《从技术洞察到技术规划赋能培训》(2024年9月6-7日)
    【课程背景】所谓技术洞察,简称(TI,TechnologyInsight),是根据市场发展趋势和客户需求,以及技术的生命周期,对某项技术发展趋势进行判断和预测,并明确未来3~5年的技术战略和战略控制点、重大的技术投资方向,完成技术战略规划的制订,并最终进行技术战略解码,为公司整体战略创造价值。技术......
  • [稳定检索|投稿优惠]2024年航空技术与机电工程国际会议(ATME 2024)
    2024年航空技术与机电工程国际会议2024InternationalConferenceonAerospaceTechnologyandMechanicalandElectricalEngineering【1】大会信息会议名称:2024年航空技术与机电工程国际会议会议简称:ATME2024大会时间:请查看官网大会地点:中国·贵阳截稿时间:请查看官......
  • Plugin Boutique Scaler EQ V1.1.3_WIN-TCD&MAC-HCiSO(2024.08更新),持续更新长期有效
    一。PluginBoutiqueScalerEQ1.1.3WIN-TCD&MAC-HCiSO   紧随屡获殊荣的音乐理论插件Scaler之后,ScalerEQ以一种引人注目的全新方式提供了音乐性和色彩的均衡。ScalerEQ是PluginBoutique推出的一款创新均衡器插件,结合传统和和声均衡功能,专注于音乐理论,为音乐制作和混......
  • 2024大模型秋招LLM相关面试题整理
    0一些基础术语大模型:一般指1亿以上参数的模型,但是这个标准一直在升级,目前万亿参数以上的模型也有了。大语言模型(LargeLanguageModel,LLM)是针对语言的大模型。175B、60B、540B等:这些一般指参数的个数,B是Billion/十亿的意思,175B是1750亿参数,这是ChatGPT大约的参数规模。强......
  • 剪映国际版(CapCut) 2024 下载 安装 汉化
    将 剪映国际版(CapCut)2024 压缩包解压到本地:点击蓝色字体下载压缩包提取码jwsg鼠标右键点击CapCut3.0.0.exe 选择 以管理员身份运行:勾选AgreewithCapCutUsersLicenseAgreement&PricacyPolicy点击More点击Browse...选择安装路径点击Installnow......
  • 软件著作权申请教程(超详细)(2024新版)软著申请
       目录一、注册账号与实名登记二、材料准备三、申请步骤1.办理身份2.软件申请信息3.软件开发信息4.软件功能与特点5.填报完成一、注册账号与实名登记    首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】的身份。中国版权保护中......
  • Gartner 魔力象限:单一供应商安全访问服务边缘 2024,Palo Alto Networks 再次荣膺领导者
    GartnerMagicQuadrantforSingle-VendorSASE2024Gartner魔力象限:单一供应商安全访问服务边缘2024请访问原文链接:https://sysin.org/blog/gartner-magic-quadrant-single-vendor-sase-2024/,查看最新版。原创作品,转载请保留出处。Gartner魔力象限:单一供应商SASE2024Pu......
  • 2024,Java开发在中国市场还有发展前景吗?
    随着2024年的到来,Java作为一种经典而强大的编程语言,依然在中国的软件开发市场中扮演着重要角色。然而,许多人对Java的未来发展前景持有不同的看法。让我们来探讨一下当前情况和未来的走向。Java程序员真的过剩了吗?2023年,各大求职网站上的java职位数量相对于其他技术岗位来......
  • 2024河南省大学生电子设计竞赛A题:AC-AC变换电路并联运行(代码工程+原理图+PCB+设计报告
    1.电赛题目2.题目需求分析在题目中需要注意以下几个关键点:1.要求电路的拓扑结构为AC-AC直接变换电路,不得使用AC-DC-AC,-------- 应该是主要针对的背靠背电路。 AC-AC电路拓扑较少见,详细可以参照《AC-AC变换技术》-----陈道练。2.系统的供电也从AC36V输入获取......
  • 【专题】2024客户服务与生成式AI人工智能的优势洞察报告合集PDF分享
    原文链接:https://tecdat.cn/?p=37222本文分析了不同AI经验的企业如何利用生成式AI,发现新手型企业通过1至3年的对话式AI经验,89%已开始使用生成式AI直接回答客户问题,而经验型企业则通过5年以上经验,推动更广泛的转型。阅读原文,获取专题报告合集全文,解锁文末340份AI人工智能相关行......