Submission #1205680

#TimeUsernameProblemLanguageResultExecution timeMemory
1205680PlayVoltzDijamant (COI16_dijament)C++20
100 / 100
499 ms668 KiB
#include <cstdio>
#include <stdio.h>
#include <stdbool.h>
#include <iostream>
#include <map>
#include <vector>
#include <climits>
#include <stack>
#include <string>
#include <queue>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <cmath>
#include <cctype>
#include <bitset>
#include <iomanip>
#include <cstring>
#include <numeric>
#include <cassert>
using namespace std;

#define int long long
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second

int32_t main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	map<string, int> m;
	vector<int> vect;
	vector<bitset<1005> > par(n+1);
	for (int i=1; i<=n; ++i){
		string s, a;
		cin>>s>>a;
		vector<int> temp;
		bool can=!m[s];
		for (cin>>a; a!=";"; cin>>a){
			if (!m[a])can=0;
			else temp.pb(m[a]);
		}
		if (!can){
			cout<<"greska\n";
			continue;
		}
		par[i][i]=1;
		for (auto c:temp)par[i]|=par[c];
		for (auto a:vect)if (par[i][a]){
			for (auto b:vect)if (par[i][b]&&!par[a][b]&&!par[b][a]&&(par[a]&par[b]).any()){
				can=0;
				break;
			}
			if (!can)break;
		}
		if (can)m[s]=i, vect.pb(i), cout<<"ok\n";
		else cout<<"greska\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...