Submission #1326362

#TimeUsernameProblemLanguageResultExecution timeMemory
1326362eri16Simurgh (IOI17_simurgh)C++20
0 / 100
0 ms568 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;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...