제출 #1217495

#제출 시각아이디문제언어결과실행 시간메모리
1217495hengliaoKeys (IOI21_keys)C++20
37 / 100
103 ms8516 KiB
#include<bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define vll vector<ll> #define pll pair<ll, ll> typedef long long ll; namespace{ const ll inf=1e18; const ll mxN=2005; ll n, m; bool done[mxN]; vll adj[mxN]; vector<pll> edges[mxN]; bool visited[mxN]; ll siz[mxN]; ll r[mxN]; void dfs(ll cur); void add_edge(ll x, ll y){ adj[x].pb(y); adj[y].pb(x); if(visited[x] && !visited[y]){ dfs(y); } else if(visited[y] && !visited[x]){ dfs(x); } } void dfs(ll cur){ if(visited[cur]) return; visited[cur]=1; if(!done[r[cur]]){ done[r[cur]]=1; for(auto &it:edges[r[cur]]){ add_edge(it.F, it.S); } } for(auto &it:adj[cur]){ dfs(it); } } } vector<int> find_reachable(vector<int> R, vector<int> u, vector<int> v, vector<int> c) { n=R.size(); for(ll i=0;i<n;i++){ r[i]=R[i]; } m=u.size(); for(ll i=0;i<m;i++){ edges[c[i]].pb({u[i], v[i]}); } for(ll i=0;i<n;i++){ siz[i]=0; memset(done, 0, sizeof(done)); for(ll j=0;j<n;j++){ adj[j].clear(); } memset(visited, 0, sizeof(visited)); dfs(i); for(ll j=0;j<n;j++){ if(visited[j]) siz[i]++; } } ll mn=inf; for(ll i=0;i<n;i++){ mn=min(mn, siz[i]); } vector<int> re(n); for(ll i=0;i<n;i++){ if(mn==siz[i]){ re[i]=1; } } return re; }
#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...