#include "simurgh.h"
#ifndef EVAL
#include "grader.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
#define precision(n) fixed << setprecision(n)
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define mp make_pair
#define eps (double)1e-9
#define PI 2*acos(0.0)
#define endl "\n"
#define sz(v) int((v).size())
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define OK cout << "OK" << endl;
const int N = 5003;
vector <vector <pii>> graph(N), mutable_graph(N);
vector <int> edges, s, cycle;
map <pii, int> id;
bool used[N], used_edges[N*4];
void _initial(int v){
used[v] = 1;
for(auto to : graph[v]){
if(used[to.first]) continue;
edges.pb(to.second);
_initial(to.first);
}
}
void dfs(int v, int p = -1){
used[v] = 1;
s.pb(v);
for(auto to : mutable_graph[v]){
if(p == to.first) continue;
if(used[to.first] == 1){
int flag = 0;
for(auto to2 : s){
if(to2 == to.first) flag++;
if(flag) cycle.pb(to2);
}
}
else if(!used[to.first]){
dfs(to.first, v);
}
}
used[v] = 2;
s.pop_back();
}
vector<int> find_roads(int n, vector<int> u, vector<int> v) {
if(n > 240) exit(0);
vector <int> ans;
for(int i = 0; i < sz(u); i++){
graph[u[i]].pb(mp(v[i], i));
graph[v[i]].pb(mp(u[i], i));
id[mp(min(u[i], v[i]), max(u[i], v[i]))] = i;
}
_initial(0);
for(int i = 0; i < n; i++) used[i] = 0;
int mx = count_common_roads(edges);
ans = edges;
for(auto to : ans) used_edges[to] = 1;
for(int i = 0; i < sz(u); i++){
if(used_edges[i]) continue;
vector <int> cycle_num;
for(auto to : edges){
mutable_graph[u[to]].pb(mp(v[to], to));
mutable_graph[v[to]].pb(mp(u[to], to));
}
mutable_graph[u[i]].pb(mp(v[i], i));
mutable_graph[v[i]].pb(mp(u[i], i));
dfs(u[i]);
for(int j = 0; j < sz(cycle); j++){
if((cycle[j] == u[i] && cycle[(j+1)%sz(cycle)] == v[i]) || (cycle[j] == v[i] && cycle[(j+1)%sz(cycle)] == u[i]))
continue;
cycle_num.pb(id[mp(min(cycle[j], cycle[(j%1)+sz(cycle)]), max(cycle[j], cycle[(j+1)%sz(cycle)]))]);
}
sort(all(cycle_num));
set <int> tmp;
for(auto to : edges) tmp.insert(to);
tmp.insert(i);
for(auto to : cycle_num){
tmp.erase(tmp.find(to));
vector <int> g;
for(auto to : tmp) g.pb(to);
auto p = count_common_roads(g);
if(p > mx){
mx = p;
edges = g;
break;
}
tmp.insert(to);
used_edges[to] = 1;
}
cycle.clear();
cycle_num.clear();
for(int j = 0; j < n; j++) mutable_graph[j].clear();
for(int j = 0; j < n; j++) used[j] = 0;
}
return edges;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
2 ms |
1024 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
2 ms |
1024 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
2 ms |
1024 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
620 KB |
correct |
2 |
Runtime error |
5 ms |
1024 KB |
Execution killed with signal 6 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
2 ms |
1024 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |