#include "simurgh.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn=500+10,maxm=maxn*maxn;
vector<int>adj[maxn];
int n,m,vis[maxn],high[maxn],p[maxn];
pair<int,int>alle[maxm];
vector<int>dfsor;
map<pair<int,int>,int>lnk;
map<int,int>mp;
vector<int>res;
vector<int>adjt,updy;
struct dsu{
int par[maxn];
dsu(){
for(int i=0;i<maxn;i++){
par[i]=i;
}
}
int root(int u){
if(u==par[u]){
return u;
}
return par[u]=root(par[u]);
}
int con(int u,int v){
u=root(u);v=root(v);
if(u==v){
return 0;
}
par[u]=v;
return 1;
}
void clear(){
for(int i=0;i<maxn;i++){
par[i]=i;
}
}
}ds;
int ted=0;
int pors(set<int>st){
ted++;
if(ted>=30000){
exit(23);
}
vector<int>ers;
for(auto x:st){
ers.push_back(x);
}
return count_common_roads(ers);
}
bool check(vector<int>ch){
ds.clear();
int ent=0;
set<int>ers;
for(auto x:ch){
ers.insert(x);
ds.con(alle[x].first,alle[x].second);
}
for(auto x:adjt){
if(ds.con(alle[x].first,alle[x].second)){
ent+=mp[x];
ers.insert(x);
}
}
if(ent==pors(ers)){
return 0;
}
return 1;
}
void upd(int ind){
set<int>st;
for(auto x:adjt){
st.insert(x);
}
st.insert(ind);
vector<int>alli;
alli.push_back(ind);
int mx=-1;
int u=alle[ind].first,v=alle[ind].second;
if(high[u]>high[v]){
swap(u,v);
}
int cnt=-1;
while(v!=u){
alli.push_back(lnk[make_pair(v,p[v])]);
v=p[v];
}
for(auto x:alli){
if(mp.count(x)==1){
cnt=x;
}
}
if(cnt>=0){
st.erase(cnt);
int wtf=pors(st);
st.insert(cnt);
for(auto x:alli){
if(mp.count(x)==0){
st.erase(x);
int tof=pors(st);
st.insert(x);
if(tof==wtf){
mp[x]=mp[cnt];
}else{
mp[x]=mp[cnt]^1;
}
if(mp[x]){
res.push_back(x);
}
}
}
return ;
}
for(auto x:alli){
st.erase(x);
mx=max(mx,pors(st));
st.insert(x);
}
for(auto x:alli){
st.erase(x);
if(mx==pors(st)){
mp[x]=0;
}else{
mp[x]=1;
res.push_back(x);
}
st.insert(x);
}
}
pair<int,int>buildt(int u=0,int par=-1){
vis[u]=1;
p[u]=par;
pair<int,int>ret=make_pair(high[u],m);
for(auto x:adj[u]){
if(vis[x]==0){
high[x]=high[u]+1;
ret=min(ret,buildt(x,u));
adjt.push_back(lnk[make_pair(u,x)]);
}
}
for(auto x:adj[u]){
if(x!=par){
ret=min(ret,make_pair(high[x],lnk[make_pair(u,x)]));
}
}
if(u!=0){
if(mp.count(lnk[make_pair(u,par)])==1){
return ret;
}
if(ret.first>=high[u]){
mp[lnk[make_pair(u,par)]]=1;
res.push_back(lnk[make_pair(u,par)]);
}else{
updy.push_back(ret.second);
}
}
return ret;
}
void erasea(){
sort(adjt.begin(),adjt.end());
set<int>sth;
for(auto x:adjt){
if(mp.count(x)==0){
exit(23);
}
sth.insert(x);
}
for(int i=0;i<n;i++){
vector<int>fake;
for(auto x:adj[i]){
if(mp.count(lnk[make_pair(i,x)])==0&&i<x){
fake.push_back(x);
}
}
swap(adj[i],fake);
}
}
void bagh(){
for(int i=0;i<n;i++){
int low=0;
while(low<(int)adj[i].size()){
int high=(int)adj[i].size(),mid;
while(high-low>=1){
mid=(high+low)>>1;
vector<int>ch;
for(int j=low;j<=mid;j++){
ch.push_back(lnk[make_pair(i,adj[i][j])]);
}
if(check(ch)){
high=mid;
}else{
low=mid+1;
}
}
if(high!=(int)adj[i].size()){
res.push_back(lnk[make_pair(i,adj[i][high])]);
low=high+1;
}
}
}
}
vector<int>solve(){
buildt();
for(auto x:res){
//cout<<"magemishe "<<x<<endl;
}
for(auto x:updy){
upd(x);
}
for(auto x:adjt){
//cout<<"ha: "<<x<<endl;
}
for(auto x:res){
//cout<<"magemishe "<<x<<endl;
}
erasea();
bagh();
return res;
}
std::vector<int> find_roads(int n_, std::vector<int> u, std::vector<int> v){
m=(int)u.size();
n=n_;
for(int i=0;i<m;i++){
lnk[make_pair(u[i],v[i])]=lnk[make_pair(v[i],u[i])]=i;
adj[u[i]].push_back(v[i]);
adj[v[i]].push_back(u[i]);
alle[i]=make_pair(u[i],v[i]);
}
return solve();
}
Compilation message
simurgh.cpp: In function 'std::vector<int> solve()':
simurgh.cpp:213:11: warning: unused variable 'x' [-Wunused-variable]
213 | for(auto x:res){
| ^
simurgh.cpp:219:11: warning: unused variable 'x' [-Wunused-variable]
219 | for(auto x:adjt){
| ^
simurgh.cpp:222:11: warning: unused variable 'x' [-Wunused-variable]
222 | for(auto x:res){
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
correct |
2 |
Correct |
1 ms |
348 KB |
correct |
3 |
Correct |
0 ms |
348 KB |
correct |
4 |
Correct |
0 ms |
348 KB |
correct |
5 |
Correct |
0 ms |
348 KB |
correct |
6 |
Correct |
0 ms |
348 KB |
correct |
7 |
Correct |
0 ms |
348 KB |
correct |
8 |
Correct |
0 ms |
348 KB |
correct |
9 |
Correct |
1 ms |
348 KB |
correct |
10 |
Correct |
0 ms |
348 KB |
correct |
11 |
Correct |
0 ms |
348 KB |
correct |
12 |
Correct |
0 ms |
348 KB |
correct |
13 |
Correct |
0 ms |
348 KB |
correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
correct |
2 |
Correct |
1 ms |
348 KB |
correct |
3 |
Correct |
0 ms |
348 KB |
correct |
4 |
Correct |
0 ms |
348 KB |
correct |
5 |
Correct |
0 ms |
348 KB |
correct |
6 |
Correct |
0 ms |
348 KB |
correct |
7 |
Correct |
0 ms |
348 KB |
correct |
8 |
Correct |
0 ms |
348 KB |
correct |
9 |
Correct |
1 ms |
348 KB |
correct |
10 |
Correct |
0 ms |
348 KB |
correct |
11 |
Correct |
0 ms |
348 KB |
correct |
12 |
Correct |
0 ms |
348 KB |
correct |
13 |
Correct |
0 ms |
348 KB |
correct |
14 |
Correct |
4 ms |
604 KB |
correct |
15 |
Correct |
4 ms |
604 KB |
correct |
16 |
Correct |
4 ms |
668 KB |
correct |
17 |
Correct |
3 ms |
604 KB |
correct |
18 |
Correct |
3 ms |
348 KB |
correct |
19 |
Correct |
4 ms |
604 KB |
correct |
20 |
Correct |
3 ms |
604 KB |
correct |
21 |
Correct |
3 ms |
604 KB |
correct |
22 |
Correct |
3 ms |
348 KB |
correct |
23 |
Correct |
3 ms |
348 KB |
correct |
24 |
Correct |
2 ms |
576 KB |
correct |
25 |
Correct |
1 ms |
348 KB |
correct |
26 |
Correct |
2 ms |
344 KB |
correct |
27 |
Correct |
2 ms |
348 KB |
correct |
28 |
Correct |
1 ms |
348 KB |
correct |
29 |
Correct |
1 ms |
348 KB |
correct |
30 |
Correct |
2 ms |
576 KB |
correct |
31 |
Correct |
2 ms |
348 KB |
correct |
32 |
Correct |
3 ms |
580 KB |
correct |
33 |
Correct |
2 ms |
348 KB |
correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
correct |
2 |
Correct |
1 ms |
348 KB |
correct |
3 |
Correct |
0 ms |
348 KB |
correct |
4 |
Correct |
0 ms |
348 KB |
correct |
5 |
Correct |
0 ms |
348 KB |
correct |
6 |
Correct |
0 ms |
348 KB |
correct |
7 |
Correct |
0 ms |
348 KB |
correct |
8 |
Correct |
0 ms |
348 KB |
correct |
9 |
Correct |
1 ms |
348 KB |
correct |
10 |
Correct |
0 ms |
348 KB |
correct |
11 |
Correct |
0 ms |
348 KB |
correct |
12 |
Correct |
0 ms |
348 KB |
correct |
13 |
Correct |
0 ms |
348 KB |
correct |
14 |
Correct |
4 ms |
604 KB |
correct |
15 |
Correct |
4 ms |
604 KB |
correct |
16 |
Correct |
4 ms |
668 KB |
correct |
17 |
Correct |
3 ms |
604 KB |
correct |
18 |
Correct |
3 ms |
348 KB |
correct |
19 |
Correct |
4 ms |
604 KB |
correct |
20 |
Correct |
3 ms |
604 KB |
correct |
21 |
Correct |
3 ms |
604 KB |
correct |
22 |
Correct |
3 ms |
348 KB |
correct |
23 |
Correct |
3 ms |
348 KB |
correct |
24 |
Correct |
2 ms |
576 KB |
correct |
25 |
Correct |
1 ms |
348 KB |
correct |
26 |
Correct |
2 ms |
344 KB |
correct |
27 |
Correct |
2 ms |
348 KB |
correct |
28 |
Correct |
1 ms |
348 KB |
correct |
29 |
Correct |
1 ms |
348 KB |
correct |
30 |
Correct |
2 ms |
576 KB |
correct |
31 |
Correct |
2 ms |
348 KB |
correct |
32 |
Correct |
3 ms |
580 KB |
correct |
33 |
Correct |
2 ms |
348 KB |
correct |
34 |
Correct |
143 ms |
4796 KB |
correct |
35 |
Correct |
130 ms |
4952 KB |
correct |
36 |
Correct |
109 ms |
3676 KB |
correct |
37 |
Correct |
28 ms |
600 KB |
correct |
38 |
Correct |
130 ms |
5136 KB |
correct |
39 |
Correct |
123 ms |
4444 KB |
correct |
40 |
Correct |
108 ms |
3672 KB |
correct |
41 |
Correct |
132 ms |
5240 KB |
correct |
42 |
Correct |
125 ms |
5132 KB |
correct |
43 |
Correct |
82 ms |
2988 KB |
correct |
44 |
Correct |
74 ms |
2528 KB |
correct |
45 |
Correct |
79 ms |
2648 KB |
correct |
46 |
Correct |
73 ms |
2136 KB |
correct |
47 |
Correct |
48 ms |
1116 KB |
correct |
48 |
Correct |
9 ms |
344 KB |
correct |
49 |
Correct |
25 ms |
600 KB |
correct |
50 |
Correct |
48 ms |
1116 KB |
correct |
51 |
Correct |
81 ms |
2864 KB |
correct |
52 |
Correct |
81 ms |
2396 KB |
correct |
53 |
Correct |
72 ms |
2272 KB |
correct |
54 |
Correct |
82 ms |
2904 KB |
correct |
55 |
Correct |
74 ms |
2904 KB |
correct |
56 |
Correct |
75 ms |
2908 KB |
correct |
57 |
Correct |
72 ms |
2908 KB |
correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
correct |
2 |
Correct |
1 ms |
344 KB |
correct |
3 |
Correct |
459 ms |
13160 KB |
correct |
4 |
Correct |
823 ms |
21332 KB |
correct |
5 |
Correct |
806 ms |
21164 KB |
correct |
6 |
Correct |
857 ms |
21324 KB |
correct |
7 |
Correct |
862 ms |
20932 KB |
correct |
8 |
Correct |
833 ms |
21076 KB |
correct |
9 |
Correct |
815 ms |
21072 KB |
correct |
10 |
Correct |
844 ms |
21000 KB |
correct |
11 |
Correct |
842 ms |
21164 KB |
correct |
12 |
Correct |
832 ms |
20932 KB |
correct |
13 |
Correct |
0 ms |
348 KB |
correct |
14 |
Correct |
805 ms |
21084 KB |
correct |
15 |
Correct |
816 ms |
21076 KB |
correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
correct |
2 |
Correct |
1 ms |
348 KB |
correct |
3 |
Correct |
0 ms |
348 KB |
correct |
4 |
Correct |
0 ms |
348 KB |
correct |
5 |
Correct |
0 ms |
348 KB |
correct |
6 |
Correct |
0 ms |
348 KB |
correct |
7 |
Correct |
0 ms |
348 KB |
correct |
8 |
Correct |
0 ms |
348 KB |
correct |
9 |
Correct |
1 ms |
348 KB |
correct |
10 |
Correct |
0 ms |
348 KB |
correct |
11 |
Correct |
0 ms |
348 KB |
correct |
12 |
Correct |
0 ms |
348 KB |
correct |
13 |
Correct |
0 ms |
348 KB |
correct |
14 |
Correct |
4 ms |
604 KB |
correct |
15 |
Correct |
4 ms |
604 KB |
correct |
16 |
Correct |
4 ms |
668 KB |
correct |
17 |
Correct |
3 ms |
604 KB |
correct |
18 |
Correct |
3 ms |
348 KB |
correct |
19 |
Correct |
4 ms |
604 KB |
correct |
20 |
Correct |
3 ms |
604 KB |
correct |
21 |
Correct |
3 ms |
604 KB |
correct |
22 |
Correct |
3 ms |
348 KB |
correct |
23 |
Correct |
3 ms |
348 KB |
correct |
24 |
Correct |
2 ms |
576 KB |
correct |
25 |
Correct |
1 ms |
348 KB |
correct |
26 |
Correct |
2 ms |
344 KB |
correct |
27 |
Correct |
2 ms |
348 KB |
correct |
28 |
Correct |
1 ms |
348 KB |
correct |
29 |
Correct |
1 ms |
348 KB |
correct |
30 |
Correct |
2 ms |
576 KB |
correct |
31 |
Correct |
2 ms |
348 KB |
correct |
32 |
Correct |
3 ms |
580 KB |
correct |
33 |
Correct |
2 ms |
348 KB |
correct |
34 |
Correct |
143 ms |
4796 KB |
correct |
35 |
Correct |
130 ms |
4952 KB |
correct |
36 |
Correct |
109 ms |
3676 KB |
correct |
37 |
Correct |
28 ms |
600 KB |
correct |
38 |
Correct |
130 ms |
5136 KB |
correct |
39 |
Correct |
123 ms |
4444 KB |
correct |
40 |
Correct |
108 ms |
3672 KB |
correct |
41 |
Correct |
132 ms |
5240 KB |
correct |
42 |
Correct |
125 ms |
5132 KB |
correct |
43 |
Correct |
82 ms |
2988 KB |
correct |
44 |
Correct |
74 ms |
2528 KB |
correct |
45 |
Correct |
79 ms |
2648 KB |
correct |
46 |
Correct |
73 ms |
2136 KB |
correct |
47 |
Correct |
48 ms |
1116 KB |
correct |
48 |
Correct |
9 ms |
344 KB |
correct |
49 |
Correct |
25 ms |
600 KB |
correct |
50 |
Correct |
48 ms |
1116 KB |
correct |
51 |
Correct |
81 ms |
2864 KB |
correct |
52 |
Correct |
81 ms |
2396 KB |
correct |
53 |
Correct |
72 ms |
2272 KB |
correct |
54 |
Correct |
82 ms |
2904 KB |
correct |
55 |
Correct |
74 ms |
2904 KB |
correct |
56 |
Correct |
75 ms |
2908 KB |
correct |
57 |
Correct |
72 ms |
2908 KB |
correct |
58 |
Correct |
1 ms |
344 KB |
correct |
59 |
Correct |
1 ms |
344 KB |
correct |
60 |
Correct |
459 ms |
13160 KB |
correct |
61 |
Correct |
823 ms |
21332 KB |
correct |
62 |
Correct |
806 ms |
21164 KB |
correct |
63 |
Correct |
857 ms |
21324 KB |
correct |
64 |
Correct |
862 ms |
20932 KB |
correct |
65 |
Correct |
833 ms |
21076 KB |
correct |
66 |
Correct |
815 ms |
21072 KB |
correct |
67 |
Correct |
844 ms |
21000 KB |
correct |
68 |
Correct |
842 ms |
21164 KB |
correct |
69 |
Correct |
832 ms |
20932 KB |
correct |
70 |
Correct |
0 ms |
348 KB |
correct |
71 |
Correct |
805 ms |
21084 KB |
correct |
72 |
Correct |
816 ms |
21076 KB |
correct |
73 |
Correct |
0 ms |
348 KB |
correct |
74 |
Incorrect |
811 ms |
21156 KB |
WA in grader: NO |
75 |
Halted |
0 ms |
0 KB |
- |