| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1326361 | eri16 | Simurgh (IOI17_simurgh) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
//#include "simurgh.h"
using namespace std;
using ll = long long;
vector <int> adj[250];
vector <int> ans(60000,0);
int vis[250];
map <pair<int,int>,int> mp;
int color=0;
vector <int> edges[250];
void dfs(int node, int parent){
for (auto child : adj[node]){
if (vis[child]==-1 && child!=parent){
vis[child]=color;
edges[color].push_back(mp[{node,child}]);
}
}
}
/*
int count_common_roads(vector<int> r){
for (auto x : r){
cout<<x<<' ';
}
int y;
cin>>y;
return y;
}
*/
vector<int> find_roads(int n, vector<int> angfang, vector<int> ende){
int m = angfang.size();
for (int i=0; i<m; i++){
adj[angfang[i]].push_back(ende[i]);
adj[ende[i]].push_back(angfang[i]);
mp[{angfang[i],ende[i]}]=i;
mp[{ende[i],angfang[i]}]=i;
}
for (int node=0; node<n; node++){
color=0;
for (int i=0; i<n; i++){
vis[i]=-1;
}
for (auto child : adj[node]){
if (vis[child]==-1){
vis[child]=color;
edges[color].push_back(mp[{node,child}]);
dfs(child,node);
color++;
}
}
for (int i=0; i<color; i++){
vector <int> query;
for (int j=0; j<color; j++){
if (j!=i){
for (auto x : edges[j]){
query.push_back(x);
}
}
}
for (int j=1; j<edges[i].size(); j++){
query.push_back(edges[i][j]);
}
int mx=0;
for (auto child : adj[node]){
if (vis[child]==i){
query.push_back(mp[{node,child}]);
int tq = count_common_roads(query);
query.pop_back();
ans[mp[{node,child}]]=tq;
mx=max(mx,0);
}
}
for (auto child : adj[node]){
if (vis[child]==i){
if (ans[mp[{node,child}]]==mx){
ans[mp[{node,child}]]=1;
}
else{
ans[mp[{node,child}]]=-1;
}
}
}
edges[i].clear();
}
}
vector <int> submission;
for (int i=0; i<m; i++){
if (ans[i]==1){
submission.push_back(i);
}
}
if (submission.size()==n-1){return submission;}
else{
//forced abortion
//int y=0;
//int x=1/y;
return submission;
}
}
