QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#119932 | #873. Königsberg Bridges | teruel | WA | 455ms | 308464kb | C++14 | 3.5kb | 2023-07-06 07:04:12 | 2023-07-06 07:04:16 |
Judging History
answer
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
template <class T> using Tree = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#ifdef ONLINE_JUDGE
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline","03")
#endif // ONLINE_JUDGE
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define uni(x) (x).erase(unique(all(x)), (x).end())
#define rnk(x, y) (upper_bound(all((x)), (y)) - (x).begin())
typedef long double ld;
typedef long long ll;
typedef __int128 LL;
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
static int rnd(int lo, int hi) {
return uniform_int_distribution <int> (lo, hi)(rng);
}
typedef pair <int, int> ii;
const ll oo = 1e12;
const ll MAX = 2e6 + 5;
const ll mod = 1e9 + 7;
int n, m, mark[MAX], it[MAX];
vector <int> ady[MAX], G[MAX], G2[MAX];
void dfs(int x, int c) {
if(it[x])
return;
it[x] = c;
G[c].push_back(x);
for(int to : ady[x])
dfs(to, c);
}
unordered_set <int> s[MAX];
int tin[MAX], low[MAX], timer, vis[MAX];
void Add(int x, int y) {
if(x > y)swap(x, y);
s[x].insert(y);
}
void dfs2(int v, int p = -1) {
vis[v] = 1;
tin[v] = low[v] = ++timer;
for(int to : ady[v]) {
if(to == p)
continue;
if(vis[to]) {
low[v] = min(low[v], tin[to]);
} else {
dfs2(to, v);
low[v] = min(low[v], low[to]);
if(low[to] > tin[v])
Add(v, to);
}
}
}
int Id[MAX];
bool Bridge(int x, int y) {
if(x > y)swap(x, y);
return s[x].count(y);
}
void dfs3(int x, int c) {
if(Id[x])
return;
Id[x] = c;
for(int to : ady[x])
if(!Bridge(x, to))
dfs3(to, c);
}
int D[MAX];
void dfs4(int x) {
for(int to : G2[x])
if(!D[to]) {
D[to] = D[x] + 1;
dfs4(to);
}
}
void solve() {
cin >> n >> m;
while(m--) {
int x, y;
cin >> x >> y;
x++, y++;
ady[x].push_back(y);
ady[y].push_back(x);
}
int c = 0, r = -1;
for(int i = 1; i <= n; i++) {
if(!it[i])
dfs(i, ++c), r++;
tin[i] = low[i] = -1;
}
for(int i = 1; i <= c; i++) {
int rt = G[i][0];
dfs2(rt);
int col = 0;
for(int x : G[i])
if(!Id[x])
dfs3(x, ++col);
for(int x : G[i])
for(int to : ady[x])
if(Id[to] != Id[x]) {
G2[Id[x]].push_back(Id[to]);
G2[Id[to]].push_back(Id[x]);
}
dfs4(1);
rt = 1;
for(int j = 2; j <= col; j++)
if(D[j] > D[rt])
rt = j;
for(int j = 1; j <= col; j++)
D[j] = 0;
D[rt] = 1;
dfs4(rt);
int top = 0;
for(int j = 1; j <= col; j++) {
top = max(top, D[j]);
D[j] = 0;
}
r += top - 1;
for(int j = 1; j <= col; j++)
G2[i].clear();
}
cout << r << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
// freopen("hack.in", "r", stdin);
// freopen("hack.out", "w", stdout);
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 20ms
memory: 261472kb
input:
4 3 0 1 1 2 2 0
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 41ms
memory: 261572kb
input:
4 2 0 1 1 2
output:
3
result:
ok 1 number(s): "3"
Test #3:
score: 0
Accepted
time: 327ms
memory: 307552kb
input:
266912 867557 0 31522 0 174162 0 4209 1 58647 1 5722 1 24762 1 258525 1 148028 1 72989 1 170812 1 260494 1 86533 1 212481 2 143457 2 47080 2 72841 2 113512 2 64754 2 231454 3 220536 3 97144 3 183508 3 177546 3 149060 3 140197 3 87427 3 169096 4 132318 4 67337 4 23014 4 34254 4 11851 4 12558 4 49756 ...
output:
380
result:
ok 1 number(s): "380"
Test #4:
score: 0
Accepted
time: 210ms
memory: 289340kb
input:
92162 903746 0 78341 0 30101 0 86910 0 71281 0 66038 0 58991 0 27261 0 12794 0 44202 0 27063 0 8617 0 1463 0 48097 0 24219 0 51184 0 42335 0 20179 0 79826 0 29670 0 121 0 80004 0 22547 0 54055 0 80647 0 20967 0 7230 0 20852 0 67815 0 63277 0 61650 1 24614 1 60787 1 78668 1 73795 1 36239 1 90410 1 71...
output:
0
result:
ok 1 number(s): "0"
Test #5:
score: 0
Accepted
time: 63ms
memory: 308464kb
input:
946158 0
output:
946157
result:
ok 1 number(s): "946157"
Test #6:
score: -100
Wrong Answer
time: 455ms
memory: 296992kb
input:
717331 671 277 661428 388 696195 2457 576086 2926 555369 2959 191594 4142 432000 4312 309773 4858 471165 4886 682026 5569 403920 5620 470329 6027 546706 6049 179350 6596 471181 6792 416677 7466 628061 7648 378219 7650 560432 7660 55602 7973 18975 8076 121285 8123 172484 8325 202734 8570 501604 8904 ...
output:
717329
result:
wrong answer 1st numbers differ - expected: '717330', found: '717329'