QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#718488 | #2517. Critical Structures | yuto1115# | AC ✓ | 126ms | 46824kb | C++20 | 1.7kb | 2024-11-06 20:39:22 | 2024-11-06 20:39:26 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define rep2(i,j,k) for(ll i = ll(j); i < ll(k); i++)
#define rep(i,k) rep2(i,0,k)
#define rrep2(i,j,k) for(ll i = ll(j)-1; i >= ll(k); i--)
#define rrep(i,k) rrep2(i,k,0)
#define all(a) a.begin(), a.end()
#define SZ(a) ll(a.size())
#define eb emplace_back
using ll = long long;
using P = pair<ll,ll>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vp = vector<P>;
using vvp = vector<vp>;
const ll inf = LLONG_MAX/4;
bool chmin(auto& a, auto& b) {return a > b ? a = b, 1 : 0; }
bool chmax(auto& a, auto& b) {return a < b ? a = b, 1 : 0; }
void solve() {
int n,m;
cin >> n >> m;
vvp G(n);
rep(i, m) {
int u, v;
cin >> u >> v;
--u, --v;
G[u].eb(v, i);
G[v].eb(u, i);
}
vl ls;
vl cmp;
int art = 0, brd = 0;
int k = 0;
vl ord(n, -1), low(n, -1);
auto dfs = [&](auto &dfs, int u, int p) -> void {
ord[u] = low[u] = k++;
bool flag = false;
int cnt = 0;
for(auto [v,id] : G[u]) {
if(ord[v] < 0) {
ls.eb(id);
++cnt;
dfs(dfs, v, u);
chmin(low[u], low[v]);
if(low[v] > ord[u]) ++brd;
if(low[v] >= ord[u]) {
if(p >= 0) flag = true;
set<ll> st;
while(true) {
assert(!ls.empty());
int e = ls.back();
st.insert(e);
ls.pop_back();
if(e == id) break;
}
cmp.eb(SZ(st));
}
} else if(v != p) {
if(ord[v] < ord[u]) ls.eb(id);
chmin(low[u], ord[v]);
}
}
flag |= p < 0 and cnt > 1;
if(flag) ++art;
};
dfs(dfs, 0, -1);
int p = SZ(cmp);
int q = *max_element(all(cmp));
int g = gcd(p, q);
cout << art << ' ' << brd << ' ' << p/g << ' ' << q/g << '\n';
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int t;
cin >> t;
rep(_, t) solve();
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3824kb
input:
1 6 6 1 2 2 3 3 4 4 5 5 6 6 1
output:
0 0 1 6
result:
ok single line: '0 0 1 6'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3532kb
input:
1 6 7 1 2 2 3 3 1 4 5 5 6 6 4 1 4
output:
2 1 1 1
result:
ok single line: '2 1 1 1'
Test #3:
score: 0
Accepted
time: 126ms
memory: 46824kb
input:
10 6 6 1 2 2 3 3 4 4 5 5 6 6 1 5 4 1 2 2 3 3 4 4 5 5 7 1 2 1 3 3 4 4 5 5 3 1 4 1 5 13 16 1 2 1 6 1 3 1 7 3 7 4 6 4 5 5 6 5 7 7 8 8 9 7 10 10 11 12 13 10 12 10 13 10 11 1 2 2 3 2 4 3 5 4 5 4 6 6 7 7 8 6 8 8 9 8 10 3 3 1 2 2 3 3 1 44 66 1 5 1 12 1 33 2 27 2 31 2 32 2 35 2 37 2 40 3 6 3 30 3 44 4 20 4 ...
output:
0 0 1 6 3 4 4 1 1 1 1 3 4 5 7 8 4 4 3 2 0 0 1 3 8 9 10 57 0 0 1 499500 2 2 3 1777 108 112 113 1531
result:
ok 10 lines