社区讨论
欧拉回路板子题 萌新刚学oi调不出来。_。
P1127词链参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo8sz7um
- 此快照首次捕获于
- 2023/10/28 00:03 2 年前
- 此快照最后确认于
- 2023/10/28 00:03 2 年前
原谅我烂到不行的码风qwq
CPP// #include <bits/stdc++.h>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <string>
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read() {
int res = 0, F = 1;
char k;
while (!isdigit(k = getchar())) if (k == '-') F = -1;
while (isdigit(k)) {
res = res * 10 + k - '0';
k = getchar();
}
return res * F;
}
struct node {
int v;
string w;
};
int n, cnt, in[1005], out[1005], f[1005], disapp[300];
string a[1005];
vector <node> g[300];
bool vis[300][1005];
bool chk(string a, string b) {
return a < b;
}
string dfs(int u, string s) {
if (s.length() == cnt) return s;
int l = g[u].size();
string q = "";
for (int i = 0; i < l; i++) {
if (vis[u][i] == 1) continue ;
int v = g[u][i].v;
string w = g[u][i].w, res = "";
if (s == "") res = g[u][i].w;
else res = s + "." + g[u][i].w;
vis[u][i] = 1;
string qwq = dfs(v, res);
if (chk(q, qwq)) q = qwq;
vis[u][i] = 0;
}
return q;
}
int find(int x) {
if (f[x] == x) return x;
else return f[x] = find(f[x]);
}
int main() {
// freopen("test.in", "r", stdin);
// freopen("test1.out","w", stdout);
cin >> n;
for (int i = int('a'); i <= int('z'); i++) f[i] = i;
for (int i = 1; i <= n; i++) {
cin >> a[i];
g[int(a[i][0])].push_back((node){int(a[i][a[i].length() - 1]), a[i]});
cnt = cnt + a[i].length() + 1;
out[int(a[i][0])]++; in[int(a[i][a[i].length() - 1])]++;
f[find(int(a[i][a[i].length() - 1]))] = f[find(int(a[i][0]))];
disapp[int(a[i][0])] = 1; disapp[int(a[i][a[i].length() - 1])] = 1;
} cnt--;
if (n == 1) {
cout << a[1] << endl;
return 0;
}
int ss = 0, st = 0; bool tmp = 0;
for (int i = int('a'); i <= int('z'); i++) {
if (!disapp[i]) continue ;
if (find(i) != find(a[1][0])) {
cout << "***" << endl;
return 0;
}
if (out[i] == in[i] + 1) {
if (ss == 0) ss = i;
else {
cout << "***" << endl;
return 0;
}
} else if (out[i] + 1 == in[i]) {
if (st == 0) st = i;
else {
cout << "***" << endl;
return 0;
}
} else if (in[i] != out[i]) {
cout << "***" << endl;
return 0;
}
}
if (ss == 0 && st == 0) {
ss = a[1][0]; st = a[1][0];
}
if ((ss == 0 && st != 0) || (ss != 0 && st == 0)) {
cout << "***" << endl;
return 0;
}
string ans = dfs(ss, "");
if (ans == "") cout << "***" << endl;
else cout << ans << endl;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...