题目链接:(https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370504)(https://vjudge.net/problem/ZOJ-4109)

题面复制不过来。

题意:n个人,编号为1~n,m个朋友关系(a和b是朋友,a和c是朋友不代表b和c是朋友),将n个人按照顺序排好,如果一个人前面没有他的朋友那么不满意度加一,让你给出一个排序使得不满意度最小化,有相同结果的排序输出字典序最小的那个。

有关系存在,考虑画图。画完图后发现不满意度的最小值即是图的连通分量的个数,因为每当选定一个连通分量的的人进入序列,与他连接的人就可以都顺着连接加入序列,从而不会增加不满意度。求连通分量个数可用并查集实现。

要求输出字典序最小的,想到了用优先队列实现的bfs,优先选择队列中编号最小的点。

因为用memset导致超时好几次,初始化时最好用多少初始化多少。

代码:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
typedef long long ll;
using namespace std; const int N=1e6+; struct cmp {
bool operator()(int a,int b) {
return a>b;
}
}; priority_queue <int,vector <int>,cmp> Q; int E[N<<],fir[N],nex[N<<],tot;
int per[N];
bool vis[N];
bool book[N];
int n,m,cnt; void init() {
for(int i=;i<=n;i++) {
per[i]=i;fir[i]=-;vis[i]=false;book[i]=false;
}
cnt=tot=;
} void connect(int from,int to) {
E[tot]=to;
nex[tot]=fir[from];
fir[from]=tot++;
E[tot]=from;
nex[tot]=fir[to];
fir[to]=tot++;
} int root(int x) {
int tempa,tempb;
tempa=x;
while(x!=per[x]) x=per[x];
while(per[tempa]!=x) {
tempb=per[tempa];
per[tempa]=x;
tempa=tempb;
}
return x;
} void merge(int x,int y) {
int t1=root(x);
int t2=root(y);
if(t1!=t2) {
per[t1]=t2;cnt++;
}
} void solve() {
int cnt=;
while(!Q.empty()) {
int q=Q.top();Q.pop();
if(vis[q]) continue;
vis[q]=true;
cnt++;
printf("%d",q);
if(cnt!=n) printf(" ");
for(int i=fir[q];i!=-;i=nex[i]) {
int to=E[i];
if(!vis[to]) Q.push(to);
}
}
printf("\n");
} int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
init();
for(int i=;i<=m;i++) {
int x,y;
scanf("%d%d",&x,&y);
connect(x,y);
merge(x,y);
}
printf("%d\n",n-cnt);
for(int i=;i<=n;i++) {
if(!book[root(i)]) {
book[root(i)]=true;
Q.push(i);
}
}
solve();
}
return ;
}

ZOJ 4109 Welcome Party的更多相关文章

  1. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  2. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  3. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  4. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  5. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

  6. ZOJ Problem Set - 1006 Do the Untwist

    今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...

  7. ZOJ Problem Set - 1001 A + B Problem

    ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...

  8. zoj 1788 Quad Trees

    zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...

  9. ZOJ 1958. Friends

    题目链接: ZOJ 1958. Friends 题目简介: (1)题目中的集合由 A-Z 的大写字母组成,例如 "{ABC}" 的字符串表示 A,B,C 组成的集合. (2)用运算 ...

随机推荐

  1. 项目引入nacos 日志不显示问题

    禁用nacos的日志即可解决 idea当中 添加vm options参数即可 -Dnacos.logging.default.config.enabled=false 打包后的启动命令  java - ...

  2. 金山wps的面试经历

    故事从两个月前开始说起吧. 前段时间突然想跳槽,原因也没啥,就是想折腾下,看看外面的世界?有一部分原因是想离家近一些稳定下来,博主上份工作坐标厦门,风景好的简直随便拍照就是大片. 不废话了,机缘巧合, ...

  3. Computing Essentials_第一章习题

  4. 科技报告|AD报告|DTIC|PB报告|STAR|ERA|NTIS|DTIC|DOE|EPA|NASA |JPL|

    信息检索-科技报告是灰色文献获取渠道有限. 技术论文中因保密需要,会删除关键性技术. AD报告也产生较早,1951年开始出版.现由美国国防技术情报中心(DTIC:Defence Technical I ...

  5. vue-cli3初始化项目

    1 npm install -g @vue/cli 创建配置 创建 1 vue create vue-app 选择配置 1234 ? Please pick a preset: (Use arrow ...

  6. DB2数据库多行一列转换成 一行一列

    在db2中遇到多行一列转为一行一列的需求时,用db2函数 LISTAGG可以实现该功能.语法如下: SELECT   [分组的字段 ] , LISTAGG([需要聚合的字段名], ',')   FRO ...

  7. sqlserver开窗函数改造样例

    作一个查询的性能优化. 先清缓存 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 原查询 前人遗留. ) ),) select @total=sum(price*pe ...

  8. 树的DFS

    Depth-first search (DFS) is an algorithm for traversing or searching tree or graph data structures. ...

  9. 使用 Commitizen 撰写 Angular 规范的 commit message

    本文为原创文章,转载请标明出处 目录 安装及配置 使用 1. 安装及配置 npm install -g commitizen npm install -g cz-conventional-change ...

  10. Word目录生成

    之所以写这篇文章,是因为每次写报告都需要生成相应目录,但常常只记得个大概,最终还得要重新百度,十分头疼,故在此记录一下. 大概分为3个步骤 步骤1 设置标题级数 进入大纲模式 选择相应级数,这里选的是 ...