我是靠谱客的博主 热心咖啡,最近开发中收集的这篇文章主要介绍Codeforces 1152E Neko and Flashback 欧拉路径,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Neko and Flashback

把a[ i ] - b[ i ] 看成边, 就是求一遍欧拉路径就好了。

注意图不连通的情况。。

#include<bits/stdc++.h>
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
using namespace std;
const int N = (int)2e5 + 7;
int n, a[N], b[N], deg[N];
int hs[N], hs_cnt;
bool ban[N];
vector<PII> G[N];
vector<int> ans;
void dfs(int u) {
while(G[u].size()) {
int v = G[u].back().se;
int id = G[u].back().fi;
G[u].pop_back();
if(!ban[id]) {
ban[id] = true;
dfs(v);
}
}
ans.push_back(hs[u]);
}
int main() {
scanf("%d", &n);
for(int i = 1; i < n; i++) {
scanf("%d", &a[i]);
hs[++hs_cnt] = a[i];
}
for(int i = 1; i < n; i++) {
scanf("%d", &b[i]);
hs[++hs_cnt] = b[i];
}
sort(hs + 1, hs + 1 + hs_cnt);
hs_cnt = unique(hs + 1, hs + 1 + hs_cnt) - hs - 1;
for(int i = 1; i < n; i++) {
a[i] = lower_bound(hs + 1, hs + 1 + hs_cnt, a[i]) - hs;
b[i] = lower_bound(hs + 1, hs + 1 + hs_cnt, b[i]) - hs;
deg[a[i]]++;
deg[b[i]]++;
G[a[i]].push_back(mk(i, b[i]));
G[b[i]].push_back(mk(i, a[i]));
}
for(int i = 1; i < n; i++) {
if(a[i] > b[i]) {
puts("-1");
return 0;
}
}
int be = 1, cnt = 0;
for(int i = 1; i <= hs_cnt; i++) {
if(deg[i] & 1) {
be = i;
cnt++;
}
}
if(cnt != 0 && cnt != 2) puts("-1");
else {
dfs(be);
if(ans.size() != n) return puts("-1"), 0;
for(int i = (int)ans.size() - 1; i >= 0; i--) {
printf("%d%c", ans[i], " n"[i == 0]);
}
}
return 0;
}
/*
*/

 

转载于:https://www.cnblogs.com/CJLHY/p/11615194.html

最后

以上就是热心咖啡为你收集整理的Codeforces 1152E Neko and Flashback 欧拉路径的全部内容,希望文章能够帮你解决Codeforces 1152E Neko and Flashback 欧拉路径所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部