news 2026/4/17 19:56:27

打卡信奥刷题(3126)用C++实现信奥题 P7428 [THUPC 2017] 母亲节的礼物

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3126)用C++实现信奥题 P7428 [THUPC 2017] 母亲节的礼物

P7428 [THUPC 2017] 母亲节的礼物

题目描述

小 B 喜欢图,尤其是边数不太多的无向简单图。

母亲节快到了,小 B 在纸上画了一张有nnn个节点、mmm条边的无向简单图(即,不存在重边、自环),保证每个点只和最多777个点相邻。接着,他想用444种不同的颜色给图中的节点进行染色,作为妈妈的母亲节礼物送给她。

小 B 希望染色之后的图尽量漂亮,他觉得相同颜色的点连成一片不好看。所以,他希望能给每对相邻的节点染上不同的颜色。遗憾的是,小 B 很快发现,在有些图中,这是不可能做到的。他不得不降低要求:每个点相邻的点中,至多有一个点和它的颜色相同。

限制条件放松了,问题也就变得简单了;但是小 B 忙着做大作业,所以来找你帮忙。现在,请你告诉小 B,是否能给图中每个点染上一个恰当的颜色,恰好满足小 B 的要求?如果可以,请你给他指出一种染色方案;否则,只好残忍地告诉小 B:impossible

输入格式

输入有多组数据,第一行一个整数TTT1≤T≤101\le T\le 101T10) ,表示数据组数。

对于每组数据:

第一行两个整数n,mn,mn,m1≤n≤25000,1≤m≤1051\le n\le 25000,1\le m\le 10^51n25000,1m105),分别表示图的点数和边数(约定点从111开始标号)。

接下来mmm行,每行两个整数x,yx,yx,y1≤x,y≤n1\le x,y\le n1x,yn),描述图中的一条边,保证不存在重边、自环。

保证在一个输入文件中,有∑n≤200000,∑m≤800000\sum n\le 200000,\sum m\le 800000n200000,m800000

输出格式

我们用小写英文字母abcd给四种不同的颜色标号。

对于每组数据:

  • 如果有解,输出一行一个长度为nnn的字符串SSS,其中SiS_iSi表示你给第iii个点染上的颜色(下标从111开始);
  • 否则,输出 impossible。

输入输出样例 #1

输入 #1

1 8 28 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 3 2 4 2 5 2 6 2 7 2 8 3 4 3 5 3 6 3 7 3 8 4 5 4 6 4 7 4 8 5 6 5 7 5 8 6 7 6 8 7 8

输出 #1

abcdabcd

说明/提示

版权信息

来自 THUPC(THU Programming Contest,清华大学程序设计竞赛)2017。

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;structnode{intv,nxt;}e[200010];intt,n,m,tot;intcolor[25010],head[25010],d[25010],num[25010];queue<int>q;intread(){charc=getchar();intx=0;while(!isdigit(c))c=getchar();while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();returnx;}voidadd(intu,intv){e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot;}signedmain(){srand(time(NULL));t=read();while(t--){n=read(),m=read();tot=0;for(inti=1;i<=n;i++)color[i]=-1,d[i]=0,head[i]=0;for(inti=1,u,v;i<=m;i++)u=read(),v=read(),add(u,v),add(v,u);for(inti=1;i<=n;i++)color[i]=rand()%4;while(!q.empty())q.pop();for(intx=1;x<=n;x++){for(inti=head[x];i;i=e[i].nxt)if(color[x]==color[e[i].v])d[x]++;if(d[x]>1)q.push(x);}while(!q.empty()){intx=q.front();q.pop();for(inti=head[x];i;i=e[i].nxt)if(color[x]==color[e[i].v])d[x]--,d[e[i].v]--;for(inti=0;i<=3;i++)num[i]=0;for(inti=head[x];i;i=e[i].nxt)num[color[e[i].v]]++;inttt=8,cl;for(inti=0;i<=3;i++)if(tt>num[i])tt=num[i],cl=i;color[x]=cl;for(inti=head[x];i;i=e[i].nxt){if(color[x]==color[e[i].v])d[x]++,d[e[i].v]++;if(d[e[i].v]>1)q.push(e[i].v);}}for(inti=1;i<=n;i++)printf("%c",'a'+color[i]);puts("");}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:52:13

微服务4:Spring Cloud 微服务实战:如何实现跨服务数据组装?

在微服务架构中&#xff0c;数据孤岛是一个常见的问题。当我们进行业务开发时&#xff0c;经常会遇到这样的场景&#xff1a;一个业务实体&#xff08;如订单&#xff09;需要展示另一个业务实体&#xff08;如用户&#xff09;的信息。今天&#xff0c;我们就通过一个经典的“…

作者头像 李华
网站建设 2026/4/17 19:51:09

清迈自由行找导游?这些避坑经验帮你少花冤枉钱

在现代社会&#xff0c;我们每天都承受着巨大的压力&#xff0c;焦虑如影随形。旅行&#xff0c;便成了我们逃离现实、放松身心的最佳方式。我一直向往清迈这座充满异域风情的小城&#xff0c;那里有古朴的寺庙、热闹的夜市&#xff0c;还有热情友善的当地人。于是&#xff0c;…

作者头像 李华
网站建设 2026/4/17 19:50:36

拯救者工具箱终极指南:5个技巧让你的游戏本性能翻倍

拯救者工具箱终极指南&#xff1a;5个技巧让你的游戏本性能翻倍 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit Lenovo Legi…

作者头像 李华
网站建设 2026/4/17 19:50:32

如何快速让GitHub说中文:3分钟安装开源汉化插件的完整指南

如何快速让GitHub说中文&#xff1a;3分钟安装开源汉化插件的完整指南 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾经在Gi…

作者头像 李华
网站建设 2026/4/17 19:48:41

暗黑3终极宏配置指南:D3KeyHelper让游戏操作更简单高效

暗黑3终极宏配置指南&#xff1a;D3KeyHelper让游戏操作更简单高效 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏神…

作者头像 李华