题意

好复杂,我就不写了。

题解

口胡了一下,发现我居然会 IOI 的题?

首先发现有 \(3\) 一定不合法,因为连通块里面有一个环的话 \(p_{i,j}\) 最多为 \(2\),有两个环的话就存在一个 \(p_{i,j}\) 为 \(4\) 了。

所以每一个连通块之内要么是树要么是基环树。

考虑某个连通块。将这个连通块划分成若干子树,有一个环每个子树的根节点连接起来,比如说下面的图就将它划分为 \(\{1,2,3\},\{4,5,6\},\{7,8,9\}\) 三棵子树。

对于在同一个连通块里面的点 \(i,j\) 来说,如果两个点在一个子树中那么 \(p_{i,j}\) 显然为 \(1\),否则 \(p_{i,j}=2\)。

所以我们可以先将 \(p_{i,j}=1\) 的那些点合并成子树,再随意指定一个根将所有 \(p_{i,j}=2\) 的点连成一个环就做完了,这个可以用两个并查集来维护。

这题无解有点难判。

代码

#include<bits/stdc++.h>
#include "supertrees.h"
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=2e3+51;
vector<vector<ll>>res,g,p;
ll n;
ll ffa[MAXN],ffa2[MAXN];
inline ll find(ll x)
{
return x==ffa[x]?x:ffa[x]=find(ffa[x]);
}
inline ll find2(ll x)
{
return x==ffa2[x]?x:ffa2[x]=find(ffa2[x]);
}
inline void connect(ll x,ll y)
{
return (void)(res[x][y]=res[y][x]=1);
}
inline ll merge(ll x,ll y)
{
ll fx=find(x),fy=find(y);
if(fx==fy)
{
return 1;
}
for(register int i=0;i<n;i++)
{
if(p[x][i]!=p[y][i])
{
return 0;
}
}
return connect(fx,fy),ffa[fy]=fx,1;
}
inline void merge2(ll x,ll y)
{
ll fx=find2(x),fy=find2(y);
if(fx!=fy)
{
ffa2[fy]=fx;
}
}
ll construct(vector<vector<ll>>x)
{
p=x,n=p.size(),res.resize(n),g.resize(n);
for(register int i=0;i<n;i++)
{
ffa[i]=ffa2[i]=i,res[i].resize(n);
}
for(register int i=0;i<n;i++)
{
for(register int j=0;j<n;j++)
{
if(p[i][j]>2)
{
return 0;
}
if(i!=j&&p[i][j]==1&&!merge(i,j))
{
return 0;
}
}
}
for(register int i=0;i<n;i++)
{
for(register int j=0;j<n;j++)
{
find(i)==i&&find(j)==j&&p[i][j]==2?merge2(i,j):(void)1;
}
}
for(register int i=0;i<n;i++)
{
for(register int j=0;j<n;j++)
{
if(i!=j&&find(i)==i&&find(j)==j&&find2(i)==find2(j)&&!p[i][j])
{
return 0;
}
}
}
for(register int i=0;i<n;i++)
{
find(i)!=i?connect(i,ffa[i]):g[find2(i)].emplace_back(i);
}
for(register int i=0;i<n;i++)
{
if(find2(i)==i&&g[i].size()==2)
{
return 0;
}
if(find2(i)==i&&g[i].size()>1)
{
for(register int j=0;j<g[i].size();j++)
{
connect(g[i][j],g[i][(j+1)%g[i].size()]);
}
}
}
return build(res),1;
}

Luogu P6830 [IOI2020]Connecting Supertrees的更多相关文章

  1. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  2. 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  3. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  4. [nginx] connect() failed (111: Connection refused) while connecting to upstream, client: 101.18.123.107, server: localhost,

    nginx一直报错, 2016/12/02 10:23:19 [error] 1472#0: *31 connect() failed (111: Connection refused)while c ...

  5. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  6. connect() failed (111: Connection refused) while connecting to upstream

    配置好lamp后,在浏览器中运行程序后,出现上面的错误. 转自:http://www.xuejiehome.com/blread-1828.html I'm experiencing 502 gate ...

  7. Ipython console in Spyder stuck on “connecting to kernel”

    简短地记录下,今天排除的spyder的BUG, 现象:打开Spyder时其他正常,但是Ipython console 不能正常获取到kernel,一直转圈,显示“connecting to kerne ...

  8. socket() failed (13: Permission denied) while connecting to upstream

    /*************************************************************************** * socket() failed (13: ...

  9. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

随机推荐

  1. python实现随机复制若干个文件到新目录

    python实现随机复制若干个文件到新目录 1说明 1.1 目的 随机选择一个文件下的若干个文件,并将文件复制到新文件夹下 1.2 要求 需要将random_select_and_copy_file. ...

  2. 从GitHub建站迁移到服务器(Java环境)

    一.购买域名和服务器 域名:阿里云:lookabc.cn 服务器:腾讯云,学生价格便宜 二.域名解析 注意:由于域名和服务器不在同一家,需要域名迁入和迁出 三.搭建服务器环境 1.下载xftp6和xs ...

  3. Salesforce LWC学习(二十六) 简单知识总结篇三

    首先本篇感谢长源edward老哥的大力帮助. 背景:我们在前端开发的时候,经常会用到输入框,并且对这个输入框设置 required或者其他的验证,当不满足条件时使用自定义的UI或者使用标准的 inpu ...

  4. Unity Shader学习笔记-1

    本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...

  5. Spring ioc 源码分析之--beanFactory.registerResolvableDependency()方法

    背景: 在spring ioc refresh()方法中,看到了如下逻辑: 要理解该逻辑的原理,先看场景:有个接口InterFaceA,它有2个实现类A1和A2 那么,如果一个类C 依赖了InterF ...

  6. mysql-14-transaction

    #TCL /* 事务控制语言 事务:一个或一组sql语句组成一个执行单元,每条sql语句相互依赖 这个执行单元要么全部执行.要么全部失败后回滚 案例:转账 事务的acid属性 1.原子性:事务时一个不 ...

  7. 日志分析平台ELK之搜索引擎Elasticsearch集群

    一.简介 什么是ELK?ELK是Elasticsearch.Logstash.Kibana这三个软件的首字母缩写:其中elasticsearch是用来做数据的存储和搜索的搜索引擎:logstash是数 ...

  8. AE2018简单的编辑

    来源:https://jingyan.baidu.com/article/1876c8525cf522890a137651.html Ae 2018 怎样锁定图层,阻止对图层进行编辑? 听语音 原创 ...

  9. matlab中reshape 重构数组

    来源:https://ww2.mathworks.cn/help/matlab/ref/reshape.html?searchHighlight=reshape&s_tid=doc_srcht ...

  10. 达梦数据库_DM8配置MPP主备

    为了提高MPP系统可靠性,克服由于单节点故障导致整个系统不能继续正常工作,DM 在普通的MPP系统基础上,引入主备守护机制,将MPP节点作为主库节点,增加备库作为备份节点,必要时可切换为主库代替故障节 ...