Submission #123222

#TimeUsernameProblemLanguageResultExecution timeMemory
123222samsDijamant (COI16_dijament)C++14
27 / 100
667 ms6492 KiB
//COI dijament

#include <bits/stdc++.h>
#define F first
#define S second

using namespace std;

typedef pair<int, int> ii;
const int maxn = 1e3+10, inf = 0x3f3f3f3f;

struct node
{
  int u, f, d;
};

int n, nd;
map<string, int> inh;
int t, pross[maxn], vis[maxn];
vector<int> graph[maxn];

int dfs(int u)
{
  vis[u] = 1;
  pross[u] = 1;
  
  for(int v: graph[u])
  {
    if(!vis[v])
    {
      if(dfs(v) == 0) return 0;
    }
    else if(pross[v] == 1) return 0;
  }

  pross[u] = 0;

  return 1;
}

void init()
{
  memset(pross, 0, sizeof pross);
  memset(vis, 0, sizeof vis);
}

void debug()
{
  for(int i = 1 ; i <= nd ; ++i)
  {
    if(graph[i].size() > 0) cout << i << ": \n  ";
    for(int u: graph[i]){
      cout << u << ' ';
    }
    if(graph[i].size() > 0) cout << "\n\n";
  }
}
int main()
{
  cin >> n;

  for(int i = 0 ; i < n ; ++i)
  {
    string name, pt, s;
    cin >> name >> pt;

    int ok = 1;  
    
    if(inh[name] != 0) ok = 0;
    
    vector<int> ad;

    while(cin >> s && s != ";")
    {
      if(inh[s] == 0 || s == name) ok = 0;
      else ad.push_back(inh[s]); 
    }

    if(!ok) cout << "greska\n";
    else
    {
      inh[name] = ++nd;

      for(auto v: ad)
      {
        graph[nd].push_back(v);
     //   g[v].push_back(nd);
      }
      
      init();
      
      ok = min(ok, dfs(nd));
      //cout << "loop: " << i << " ok: " << ok << "\n";
      //debug();
      
      if(!ok)
      {
        //cout << "1: ";
        //for(auto x: graph[nd]) g[x].pop_back();
        graph[nd].clear();
        
        inh[name] = 0;
        nd--;

        cout << "greska\n";
        continue;
      }
      
      /*ok = diamond(nd);

      if(!ok)
      {
        //cout << "2: ";
        graph[nd].clear();
        inh[name] = 0;
        nd--;

        cout << "greska\n";
        continue;
      }*/
      cout << "ok\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...