[loj3176]景点划分

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 struct ji{
5 int nex,to;
6 }edge[N<<2];
7 pair<int,int>a[11];
8 int E,r,n,m,x,y,flag,head[N],sz[N],dfn[N],low[N],tot[N],ans[N];
9 void add(int x,int y){
10 edge[E].nex=head[x];
11 edge[E].to=y;
12 head[x]=E++;
13 }
14 void update(int k,int p){
15 if ((!a[p].first)||(ans[k]))return;
16 a[p].first--;
17 ans[k]=a[p].second;
18 for(int i=head[k];i!=-1;i=edge[i].nex)
19 if (edge[i].to)update(edge[i].to,p);
20 }
21 void dfs(int k,int fa){
22 int mx=0,s=0;
23 sz[k]=1;
24 dfn[k]=low[k]=++x;
25 for(int i=head[k];i!=-1;i=edge[i].nex)
26 if (!sz[edge[i].to]){
27 dfs(edge[i].to,k);
28 if (flag)return;
29 sz[k]+=sz[edge[i].to];
30 low[k]=min(low[k],low[edge[i].to]);
31 if (low[edge[i].to]<dfn[k])s+=sz[edge[i].to];
32 }
33 else{
34 if (edge[i].to!=fa)low[k]=min(low[k],dfn[edge[i].to]);
35 edge[i].to=0;
36 }
37 if ((mx<a[1].first)&&(sz[k]>=a[1].first)){
38 flag=2;
39 if (n-sz[k]+s<a[1].first){
40 flag=1;
41 return;
42 }
43 if (n-sz[k]+s<a[2].first)swap(a[1],a[2]);
44 ans[k]=a[1].second;
45 a[1].first--;
46 for(int i=head[k];i!=-1;i=edge[i].nex)
47 if ((edge[i].to)&&(low[edge[i].to]>=dfn[k]))update(edge[i].to,1);
48 for(int i=head[k];i!=-1;i=edge[i].nex)
49 if ((edge[i].to)&&(low[edge[i].to]<dfn[k]))update(edge[i].to,1);
50 update(r,2);
51 for(int i=1;i<=n;i++)
52 if (!ans[i])ans[i]=a[3].second;
53 }
54 }
55 int main(){
56 srand(time(0));
57 scanf("%d%d",&n,&m);
58 r=rand()%n+1;
59 for(int i=1;i<=3;i++){
60 scanf("%d",&a[i].first);
61 a[i].second=i;
62 }
63 sort(a+1,a+4);
64 memset(head,-1,sizeof(head));
65 for(int i=1;i<=m;i++){
66 scanf("%d%d",&x,&y);
67 add(x+1,y+1);
68 add(y+1,x+1);
69 }
70 dfs(r,0);
71 for(int i=1;i<=n;i++)printf("%d ",ans[i]);
72 }
[loj3176]景点划分的更多相关文章
- <题解>[IOI2019]景点划分
题目传送门(luogu) 题目传送门(loj) 这个题对我来说可以算是超出了我的能力范围 被学长拿来教我做构造,构造题真简单,构造题真是人,构造题真能手切... 首先对于本题,必须要知道dfs树这东西 ...
- world.construct(me);
目录 0 引言 0.1 所谓构造题 0.2 重点是动机 (motivation) 1 实践出真知 1.1 「CSP-S 2021」「洛谷 P7915」回文 1.1.1 题目大意 1.1.2 解题过程 ...
- [LeetCode] Partition List 划分链表
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- SWMM模型子汇水区划分的几种方法
子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...
- 等价类划分方法的应用(jsp)
[问题描述] 在三个文本框中输入字符串,要求均为1到6个英文字符或数字,按submit提交. [划分等价类] 条件1: 字符合法; 条件2: 输入1长度合法; 条件3: 输入2长度合法: 条件4: 输 ...
- Java上等价类划分测试的实现
利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...
- ENode框架Conference案例分析系列之 - 上下文划分和领域建模
前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...
- Cesium原理篇:2最长的一帧之网格划分
上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...
- 两种交换机配置模式,以配置基于端口划分的VLAN为例
关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...
随机推荐
- Linux下iptables学习笔记
Linux下iptables学习笔记 在Centos7版本之后,防火墙应用已经由从前的iptables转变为firewall这款应用了.但是,当今绝大多数的Linux版本(特别是企业中)还是使用的6. ...
- 遇到括号就是栈(bushi)
CF508E Arthur and Brackets 我在赛场上想都没想直接DP \(O(n^3)\)过了 但别人说正解是栈+贪心 讲讲DP \(bool\) \(dp[i][j]\)表示从第i对括号 ...
- 题解 Beautiful Pair
题目传送门 题目大意 给出一个 \(n\) 个点的序列 \(a_{1,2,...,n}\) ,问有多少对点对 \((i,j)\) 满足 \(a_i\times a_j\le a_k(i\le k\le ...
- 重庆邮电大学第十一届ACM程序设计竞赛-网络选拔赛 C题
1008: 偷袭 时间限制: 1.000 sec 内存限制: 128 MB 武林要以和为贵,张麻子不讲武德来偷袭马老师的亲传弟子. 马老师有n个亲传弟子,每个弟子有一个武力值a[i]. n个弟子中只有 ...
- vue 2.0源码学习笔记—new Vue ( Vue 初始化过程 )
new Vue(Vue 初始化) 一个vue实例化到底经历了什么?已下是博主自己的总结,不正确的地方请指出,谢谢~ 一.简述 从使用角度来看,挂载的顺序如下 1. $slots 2. $scopedS ...
- kettle使用
Kettle的安装及简单使用 目录 Kettle的安装及简单使用 一.kettle概述 二.kettle安装部署和使用 Windows下安装 案例1:MySQL to MySQL 案例2:使用作业执行 ...
- 离线状态迁移Anaconda虚拟环境
离线状态迁移Anaconda虚拟环境 同样是项目需求,需要布署的服务器上的Anaconda安装到了普通账户下 而后续所有的内容都需要通过root账户进行操作,而服务器已经布署,联网比较麻烦 本文提出, ...
- (三)、Docker常用基础命令
1.Docker 帮助命令 帮助命令: docker version 查看版本 docker info 查询docker详细信息 docker --help 查看命令帮助 2.Docker 镜像命令 ...
- series和读取外部数据
1.为什么学习pandas 我们并不是不愿意学习新的知识,只是在学习之前我们更想知道学习他们能够帮助我们解决什么问题.--伟哥 numpy虽然能够帮助我们处理数值,但是pandas除了处理数值之外(基 ...
- 深度解析HashMap集合底层原理
目录 前置知识 ==和equals的区别 为什么要重写equals和HashCode 时间复杂度 (不带符号右移) >>> ^异或运算 &(与运算) 位移操作:1<&l ...