QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#58414 | #3846. Link-Cut Tree | tt | TL | 15ms | 20208kb | C++ | 2.2kb | 2022-10-26 12:13:55 | 2022-10-26 12:13:58 |
Judging History
answer
#define fr(i, a, b) for(ll i = a; i <= b; ++i)
#define frd(i, a, b) for(ll i = a; i >= b; --i)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PLL;
const ll INF = 0x3f3f3f3f3f3f3f3f;
ll T;
/* ============================================================================= */
const ll N = 1e6;
ll n, m;
ll h[N], e[N], ne[N], w[N], idx;
ll aa[N], bb[N];
void add(ll a, ll b, ll c) {
e[idx] = b;
w[idx] = c;
ne[idx] = h[a];
h[a] = idx++;
}
ll p[N];
ll find(ll x) {
if (p[x] == x) return x;
return p[x] = find(p[x]);
}
vector<ll> record;
bool st[N];
bool dfs(ll u, ll start) {
st[u] = true; // st[u] 表示点u已经被遍历过
for (ll i = h[u]; i != -1; i = ne[i]) {
ll j = e[i];
ll ww = w[i];
if (!st[j]) {
record.push_back(ww);
if (!dfs(j, start)) record.pop_back();
else return true;
} else {
if (j == start){
record.push_back(ww);
return true;
}
}
}
return false;
}
void init() {
fr(i, 1, N - 1) p[i] = i;
memset(h, -1, sizeof h);
memset(st, 0, sizeof st);
idx = 0;
while (!record.empty()) record.pop_back();
}
int main() {
cin >> T;
while (T--) {
init();
cin >> n >> m;
ll a, b;
ll ww = 1;
ll flag = true;
fr(i, 1, m) {
cin >> aa[i] >> bb[i];
}
fr(i, 1, m) {
a = aa[i];
b = bb[i];
add(a, b, ww);
if (find(a) == find(b)) break;
add(b, a, ww);
ww += 1;
p[find(a)] = find(b);
// no circle
if (i == m) {
cout << -1 << endl;
flag = false;
}
}
if (!flag) continue;
dfs(a, a);
sort(record.begin(), record.end());
for (int i = 0; i < record.size()-1; ++i) {
cout << record[i] << " ";
}
cout << record[record.size()-1] << endl;
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 15ms
memory: 20208kb
input:
2 6 8 1 2 2 3 5 6 3 4 2 5 5 4 5 1 4 2 4 2 1 2 4 3
output:
2 4 5 6 -1
result:
ok 2 lines
Test #2:
score: -100
Time Limit Exceeded
input:
1658 9 20 6 4 5 8 1 7 2 3 3 8 3 1 4 8 5 3 7 6 1 6 4 9 4 1 9 3 2 5 4 5 8 9 1 8 4 2 5 7 3 6 14 78 13 12 10 8 2 10 6 13 2 14 13 1 14 10 9 6 2 13 8 3 9 8 5 6 14 12 8 1 9 14 9 5 12 6 5 10 3 12 10 4 8 5 9 10 6 8 1 6 12 4 3 13 1 5 10 3 13 9 10 13 2 5 4 7 7 1 7 6 9 3 2 12 1 10 9 1 1 14 3 1 3 4 11 1 11 6 7 1...
output:
2 5 8 3 5 7 1 3 4 2 3 4 2 3 4 7 13 1 3 4 5 9 3 4 7 12 1 2 3 8 10 11 2 3 5 7 12 13 14 15 16 1 2 3 5 1 2 4 1 3 4 1 2 3 1 2 3 10 11 15 1 5 6 1 5 7 1 2 3 4 -1 1 3 6 -1 1 2 3 5 -1 -1 6 8 9 10 11 16 1 2 6 2 3 4 -1 -1 7 8 12 13 18 -1 1 4 8 12 3 5 10 4 6 8 1 2 3 4 3 5 6 5 8 10 15 4 6 8 -1 1 2 3 5 6 1 3 4 1 ...