[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交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...
随机推荐
- Go语言核心36讲(Go语言基础知识二)--学习笔记
02 | 命令源码文件 我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件. 这里的源码文件又分为三种,即:命令源码文件.库源码文件和测 ...
- Hive SQL的底层编译过程详解
本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理.第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程, ...
- CORS+XSS的漏洞利用payload
之前有人问我有没有CORS+XSS的利用姿势,翻了一下国内貌似都没有利用姿势于是就写了这篇文章!!! 首先找到一个反射xss,然后使用xss加载javascript代码达到跨域劫持目的payload如 ...
- 初学Python-day11 函数4
函数 1.递归函数 自己不断调用自己的过程 2.递归求和 1 def sum(arg): 2 if arg == 1: 3 return 1 4 return arg + sum(arg - 1) 5 ...
- Python在Linux下编译安装报错:Makefile:1141:install
正常情况下执行:./configuremake && make install可以直接安装python,但是在在更新了乌版图后居然报错了!!!检查了一圈,发现乌版图安装了python3 ...
- .net 5.0 ref文件夹的作用
ref目录里的dll是一个名为参考组件的东西,微软MSDN给的解释是 参考组件是一种特殊类型的程序集,仅包含表示库的公共API面所需的最小元数据数量.它们包括用于在构建工具中引用程序集时重要的所有成员 ...
- 【二食堂】Beta - 测试报告
Beta - 测试报告 测试过程中发现的bug Beta阶段的新bug 我们在Beta阶段的开发过程中就进行了测试,发现了许多bug.这其中后端的bug比较多,在这里我列举一些比较重要的功能性bug. ...
- python教程-(三)使用字符串
一.设置字符串的格式:精简版 方法1 >>> format = "Hello %s, welcome to %s" >>> values = ( ...
- JMH 使用指南
简介 JMH(Java Microbenchmark Harness)是用于代码微基准测试的工具套件,主要是基于方法层面的基准测试,精度可以达到纳秒级.该工具是由 Oracle 内部实现 JIT 的大 ...
- [源码解析] PyTorch 如何使用GPU
[源码解析] PyTorch 如何使用GPU 目录 [源码解析] PyTorch 如何使用GPU 0x00 摘要 0x01 问题 0x02 移动模型到GPU 2.1 cuda 操作 2.2 Modul ...