首页 > 其他分享 >CF453C Little Pony and Summer Sun Celebration

CF453C Little Pony and Summer Sun Celebration

时间:2024-07-03 14:08:29浏览次数:16  
标签:std Summer Little Pony vis int cnt pb fa

CF453C Little Pony and Summer Sun Celebration

生成树+构造

看看一个点的奇偶性意味着什么。意味着奇数的点必须经过至少一次,而偶数不用经过。那么所有奇数的点两两路径必须构成一个连通块。然后就可以开始想构造了。

考虑连通块上的任意一棵生成树,如果一个非根节点走完子树后次数不满足条件,可以往父亲走一步再走回来,那么这个节点就满足条件了。

发现根节点无法用这个策略,但是如果根节点不满足条件,可以把开头的根节点去掉,随便从一个儿子开始就可以了。

输出答案前要检查所有条件是否满足,还有可以加些特判,这里就不说了。

复杂度 \(O(n)\)。

#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back

using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 1e5 + 10;
int n, m, rt, flg;
int vis[N], cnt[N], a[N], t[N];
std::vector<int> e[N];
void dfs(int u, int fa) {
	t[u] = 1;
	for(auto v : e[u]) {
		if(v == fa || t[v]) continue;
		dfs(v, u);
		vis[u] |= vis[v];
	}
}
std::vector<int> pa;
void print(int u, int fa) {
	t[u] = 1;
	pa.pb(u);
	cnt[u]++;
	for (auto v : e[u]) {
		if(v == fa || !vis[v] || t[v]) continue;
		print(v, u);
		pa.pb(u);
		cnt[u]++;
	}
	if(u == rt) {
		if((cnt[u] & 1) != a[u]) cnt[u]--, flg = 1;
	} else if((cnt[u] & 1) != a[u]) {
		cnt[u]++, cnt[fa]++;
		pa.pb(fa), pa.pb(u);
	}
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
	std::cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int u, v;
		std::cin >> u >> v;
		e[u].pb(v), e[v].pb(u);
	}	
	bool ok = 1;
	for (int i = 1; i <= n; i++) {
		std::cin >> a[i];
		vis[i] = a[i];
		if(rt && a[i]) ok = 0;
		if(a[i]) rt = i;
	}
	if(!m && !ok) {
		std::cout << "-1\n";
		return 0;
	} else if(!rt) {
		std::cout << "0\n";
		return 0;
	}
	dfs(rt, 0);

	memset(t, 0, sizeof(t));
	print(rt, 0);
	for(int i = 1; i <= n; i++) {
		if((cnt[i] & 1) != a[i]) {
			std::cout << "-1\n";
			return 0;
		}
	}
	std::cout << pa.size() - flg << "\n";
	for(int i = flg; i < pa.size(); i++) std::cout << pa[i] << " ";
	return 0;
}

标签:std,Summer,Little,Pony,vis,int,cnt,pb,fa
From: https://www.cnblogs.com/FireRaku/p/18281514

相关文章

  • EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2)
    Preface沟槽的又掉分了,难得凑齐了五个人打LOL结果只玩了两把就去打这场CF了,早知道继续玩了这场经典开局不顺,C想了一堆假做法到30min的时候才出,D题上来就莽一个贪心然后爆WA两发后还不知道错哪了,卡到90min的时候心态小崩滚去看了眼E马上秒了后回来发现D是个很一眼的DP,写完后就只......
  • UNIQUE VISION Programming Contest 2024 Summer (AtCoder Beginner Contest 359)
    A-CountTakahashi(abc359A)解题思路遍历判断即可神奇的代码#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<map>#include<set>#include<cstring>usingnamespacestd;#defineendl'\n......
  • UNIQUE VISION Programming Contest 2024 Summer (AtCoder Beginner Contest 359) 题
    点我看题A-CountTakahashi没啥好说的点击查看代码#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<n;++i)#definerepn(i,n)for(inti=1;i<=n;++i)#defineLLlonglong#definefifirst#definesesecond#definepbpush_back#definemprmake_pair......
  • summer-data介绍
    官网地址:https://www.summer-data.com代码库地址:https://gitee.com/hahan2020/summer-datasummer-data是什么?summer-data设计用于替代mybatis和hibernate。从个人角度挑一些它们和springjdbc-template的缺点,这些缺点是我创作summer-data的原因。mybatis需......
  • pony
    LifeinPonyTwon作为一个资深马迷,前不久才知道了ponytwon的存在,毫不犹豫的投入游玩了一番,以下记录了我的一些见闻。https://pony.town有队伍正在训练游行活动,嘿嘿。与陌生人一起在书柜后面组合出小小马团体。......
  • Topcoder SRM592-Div1-Lv2 LittleElephantAndPermutationDiv1
    题意设\(A,B\)为两个长为\(n\(\leq50)\)的排列,定义操作\(F(A,B)=\sum\limits_{i=1}^{n}\max(A_i,B_i)\),给定\(n,k\),求有多少种有序对\((A,B)\)满足\(F(A,B)\geqk\),答案模\(10^9+7\)。思路首先还是用经典的思路将无序转为无序,我们假定\(A\)是有序的即\(A={1,2,3,......
  • The three little pigs
    Onadarkandwindynight,I,thebigbadwolf,embarkedonmyhuntforthethreelittlepigs.Followingtheirdistinctscent,Itraversedthedenseforestinsearchoftheirwhereabouts.Eventually,Istumbleduponthefirstpig'sstrawhouseinan......
  • Summer '24:不容错过的Salesforce Flow 10大新功能!
    Flow是整个Salesforce平台自动化的未来。自从WorkflowRules和ProcessBuilders被淘汰,Salesforce将重点放在了Flow上,一直在将大量资源用于开发Flow创新,本次Summer'24中Flow也有不少亮眼的更新!01FlowCreationWizard和Flow类型创建Flow与以前有所不同。你看到的第一步只是让......
  • Little Pony and Lord Tirek 题解
    LittlePonyandLordTirek题解\(\texttt{ProblemLink}\)题目大意给定长度为\(n\)的序列,第\(i\)个数有三个值:\(s_i,m_i,r_i\),每秒对于每个数执行\(s_i\leftarrow\min\{s_i+r_i,m_i\}\)。有\(m\)个查询,每次查询三个值:\(t,l,r\)查询时刻\(t\),\([l,......
  • pony:简洁易用的 ORM 库
    PythonPonyORM是一个功能强大且易于使用的ORM库,它提供了简洁的语法和强大的功能,使得开发者能够更轻松地进行数据库操作。PythonPonyORM的主要特点包括:简单易用:PythonPonyORM提供了简单易懂的语法,使得开发者可以快速上手并进行数据库操作。强大的查询功能:PythonPon......