D. Edge Split

news2025/4/5 15:16:42

Problem - D - Codeforces

思路:思路想到了,但是不知道用什么方法写。。首先我们先看只有一个树的情况,那么如果我们所有的边是一个颜色,那么答案是1+n,如果我们将其中的一条边变色,那么产生的答案是2+n-1,答案是不变的,如果有n条边,同样的方式我们如果所有的边为一个颜色,那么产生答案是1+n,但是n条边的树是存在环的,我们可以将环上的一条边变为另一个颜色那么答案就会变成1+n-1,所以我们通过总结发现,只要同一种颜色没有环,最终的答案就是最小的。那么现在问题就变成了构造两个无环图,我们可以先构造一颗树,那么最多会剩下3条边,如果剩下的三条边能够构成环,那么我们任意的选择一条边,加到树上,然后选择这条边的某个顶点,然后把这个顶点在树种的所有连边全都删除,除了新加的这条边,这样是一定不会有环的,因为首先树上是肯定没有环的,可能剩下的边存在环,因为新砍下来边是从树上看下来的,那么它们之间肯定是不能够形成环的,并且这写边与剩下的两个一定也不能够构成,因为没有重边的存在,要构成环那么只能是之前新加的那条边,所以肯定也不可能

// Problem: D. Edge Split
// Contest: Codeforces - Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022
// URL: https://codeforces.com/contest/1726/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
#include<sstream>
#include<cassert>
#define fi first
#define se second
#define i128 __int128
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7,mod1=998244353;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}

int T,hackT;
int n,m,k;
int ans[N];
PII edge[N];
int f[N];
int h[N],e[M],ne[M],idx;
bool st[N];

void add(int a,int b) {
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

int find(int x) {
	if(x!=f[x]) f[x]=find(f[x]);
	return f[x];
}

int dfs(int u,int fa,bool &flag) {
	if(st[u]) {
		flag=true;
		return 0;
	}
	st[u]=true;
	int res=1;
	for(int i=h[u];i!=-1;i=ne[i]) {
		int j=e[i];
		
		if(j==fa) continue;
		res+=dfs(j,u,flag);
	}
	
	return res;
}

bool check(vector<PII> &vis) {
	for(int i=0;i<=n;i++) h[i]=-1,st[i]=false;
	idx=0;
	
	for(int i=0;i<vis.size();i++) {
		int a=vis[i].fi,b=vis[i].se;
		add(a,b),add(b,a);
	}
	
	bool flag=false;
	if(dfs(vis[0].fi,-1,flag)==3&&flag) return true;
	else return false;
}

void solve() {
	n=read(),m=read();
	
	for(int i=1;i<=n;i++) f[i]=i;
	for(int i=1;i<=m;i++) ans[i]=0;
	
	vector<PII> vis;
	for(int i=1;i<=m;i++) {
		int a=read(),b=read();
		edge[i]={a,b};
		int fa=find(a),fb=find(b);
		
		if(fa!=fb) {
			f[fa]=fb;
			ans[i]=1;
		}else vis.push_back({a,b});
	}
	
	if(vis.size()==3) {
		if(check(vis)) {
			int id=vis[0].fi;
			for(int i=1;i<=m;i++) {
				if(!ans[i]) continue;
				if(edge[i].fi==id||edge[i].se==id) ans[i]=0;
			}
			for(int i=1;i<=m;i++) {
				if(edge[i].fi==vis[0].fi&&edge[i].se==vis[0].se) ans[i]=1;
			}
		}
	}
	
	for(int i=1;i<=m;i++) printf("%d",ans[i]);
	printf("\n");
}   

int main() {
    // init();
    // stin();
	// ios::sync_with_stdio(false); 

    scanf("%d",&T);
    // T=1; 
    while(T--) hackT++,solve();
    
    return 0;       
}          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buuctf web [ACTF2020 新生赛]Upload

明了但不明显的文件上传 传个试试 行&#xff0c;抓包吧&#xff0c;php格式不行&#xff0c;就先上传要求的格式&#xff1a;jpg、png、gif 抓到上传的包之后&#xff0c;再修改成我们想要的 常见的php格式绕过有&#xff1a;php,php3,php4,php5,phtml,pht 挨个试试 这是上个…

Python 根据身高体重计算体质(BMI)指数

""" 根据身高体重计算体质(BMI)指数知识点&#xff1a;1、计算公式&#xff1a;体质指数(BMI) 体重(KG) / (身高(M) * 身高(M))2、变量类型转换3、运算符幂**&#xff0c;例如&#xff1a;3 ** 2 9 <> 3 * 34、更多的运用请参考&#xff1a;https://blo…

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow环境PyQt5环境 模块实现1. 数据预处理 相关其它博客工程源代码下载其它资料下载 前言 本项目采用了矩阵分解算法&#xff0c;用于对玩家已游玩的数据进行深入分析。它的目标是从众多游戏中筛选出最适合…

糖果传递问题(超详细的数论公式推导+贪心结论+均分问题)

糖果传递问题 文章目录 糖果传递问题问题描述问题分析【公式推导过程】代码 问题描述 有 n 个小朋友坐成一圈&#xff0c;每人有 a[i] 个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正…

【2】贪心算法-综述

前言 从前&#xff0c;有一个很穷的人救了一条蛇的命&#xff0c;蛇为了报答他的救命之 恩&#xff0c;于是就让这个人提出要求&#xff0c;满足他的愿望。这个人一开始只要求简 单的衣食&#xff0c;蛇都满足了他的愿望&#xff0c;后来慢慢地贪欲升起&#xff0c;要求做官&am…

基于SSM的出租车管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

智荟康午休课桌椅成为第十届中国慈善展览会公益亮点产品

第十届中国慈善展览会&#xff08;以下简称“慈展会”&#xff09;于9月15日至17日在深圳会展中心隆重举办&#xff0c;此次展会为期3天&#xff0c;主要围绕“共建现代化慈善&#xff0c;聚力高质量发展”的主题&#xff0c;重点聚焦聚力民生福祉&#xff0c;将打造“一展多元…

新手小白如何学习自动化测试?

前言 测试自动化在各个行业和应用中被广泛使用&#xff0c;并产生巨大的效果。软件开发方法&#xff0c;如DevOps、Agile、Waterfall和它们的不同风格&#xff0c;广泛使用测试自动化来降低成本&#xff0c;提高效率和准确性&#xff0c;并加快回归测试。 测试自动化是在充分…

LeetCode 75 - 01 : 最小面积矩形

type pair struct{x, y int }func minAreaRect(points [][]int)int{mp : map[pair]struct{}{}// 将二维数组中的坐标映射到map中for i : range points{mp[pair{points[i][0], points[i][1]}] struct{}{}}// 将结果设置为一个最大值&#xff0c;防止影响求最小值的逻辑res : ma…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…

七天学会C语言-第六天(指针)

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量&#xff0c;它们有一些重要的区别和联系。 普通变量是一种存储数据的容器&#xff0c;可以直接存储和访问数据的值。&#xff1a; int num 10; // 定义一个整数型普通变量num&#xff0c;赋值为10在例…

【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【二叉树的形态变化】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条…

后端思维:通过代码去重,做一个后端通用模板

目录 后端思维 1. 优化前的例子 2. 抽取公用方法去重 3. 反射对比字段 4.Lambda函数式泛型 5. 继承多态. 6. 模板方法 6.1 定义对比模板的骨架 6.2 模板的方法逐步细化 6.3 不同对比子类 7. 工厂模式 模板方法 策略模式全家桶 最后 后端思维 最近工作中,我通过层层…

学Python的漫画漫步进阶 -- 第十二步.文件读写

学Python的漫画漫步进阶 -- 第十二步.文件读写 十二、文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件 12.3 读写文本文件12.4 动动手——复制文本文件12.5 读写二进制文件12.6 动动手——复制二进制文件12.7 练一练12.8…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

MidJourneyAI绘画之月满中秋情更浓

皓月当空照人间&#xff0c; 银河洒满天幕间。 嫦娥轻舞婵娟态&#xff0c; 桂香飘散诗意添。 团圆乐享如意时&#xff0c; 家人相聚笑声吹。 中秋欢庆如诗意&#xff0c; 祝福平安好运气。

从网约车平台合规问题看企业合规难题如何破解

随着互联网的快速发展&#xff0c;网约车行业逐渐崛起并成为人们出行的重要选择之一。然而&#xff0c;虽然网约车平台带来了便利和效率&#xff0c;但也引发了一系列合规问题。 近日&#xff0c;西安市交通运输综合执法支队和西安市出租汽车管理处组织开展了西安市网约车行业…

Leetcode 95. 不同的二叉搜索树 II

文章目录 题目代码&#xff08;9.21 首刷看解析&#xff09; 题目 Leetcode 95. 不同的二叉搜索树 II 代码&#xff08;9.21 首刷看解析&#xff09; class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…

singularity docker 拉取镜像 seurat和scapy spatial空转数据转换 cell2location

JiekaiLab/scDIOR: scDIOR: Single cell data IO softwaRe (github.com) module availablemodule load singularitysingularity pull docker://jiekailab/scdior-image:Seuratv4_Scanpy1.8 export PATH/seu_share/apps/singularity/bin/singularity:$PATH