# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1269860 | herominhsteve | Bosses (BOI16_bosses) | C++20 | 377 ms | 752 KiB |
#include <bits/stdc++.h>
#define el '\n'
#define FNAME "bosses"
#define allof(x) x.begin(),x.end()
#define allof1(x) x.begin()+1,x.end()
#define mset(x,n) memset(x,(n),sizeof(x))
using namespace std;
const long long MOD = (long long) 1e9+7;
template<class X,class Y> bool minimize(X &a,Y b){ if (a>b) {a=b; return true;} return false;}
template<class X,class Y> bool maximize(X &a,Y b){ if (a<b) {a=b; return true;} return false;}
void setup(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
if (fopen(FNAME".inp","r")){
freopen(FNAME".inp","r",stdin);
freopen(FNAME".out","w",stdout);
}
}
const int MAXN = 5005;
const long long INF = (long long) 1e15 + 15092007;
int n;
vector<int> graph[MAXN];
void init(){
cin>>n;
for (int u=1;u<=n;u++){
int k;
cin>>k;
for (int i=0;i<k;i++){
int p;
cin>>p;
graph[p].push_back(u);
}
}
}
long long bfs(int s){
vector<long long> distancia(n+1,-1);
queue<int> qu;
qu.push(s);
distancia[s] = 1;
while (!qu.empty()){
int u = qu.front(); qu.pop();
for (int v : graph[u]){
if (distancia[v]==-1){
distancia[v] = distancia[u] + 1;
qu.push(v);
}
}
}
long long res = 0;
for (int u=1;u<=n;u++){
if (distancia[u]==-1) return INF;
res += distancia[u];
}
return res;
}
void sol(){
long long res = INF;
for (int u=1;u<=n;u++) minimize(res,bfs(u));
cout<< (res==INF ? -1 : res);
}
int main(){
setup();
init();
sol();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |