답안 #123551

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
123551 2019-07-01T15:23:45 Z sams Dijamant (COI16_dijament) C++14
27 / 100
907 ms 6620 KB
//COI dijament
 
#include <bits/stdc++.h>
#define F first
#define S second
 
using namespace std;
 
typedef unsigned long long ll;
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];
ll sub[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 diamond(int u)
{
  for(int i = 0 ; i < graph[u].size() ; ++i)
  {
    int a = graph[u][i];
    
    for(int j = i + 1 ; j < graph[u].size() ; ++j)
    {
      int b = graph[u][j];
      int c1 = sub[b]&(1<<a);
      int c2 = sub[a]&(1<<b);
      int c3 = sub[a]&sub[b];

      if(c1 == 0 && c2 == 0 && c3 > 0)
      {
        return 0;
      }
    }
  }

  return 1;
}

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 u: ad)
      {
        graph[nd].push_back(u);
        
        sub[nd] = (1<<u);
        sub[nd] |= sub[u];

        /*
        sub[nd][u] = 1;

        for(int i = 0 ; i < graph[u].size() ; ++i)
        {
          int v = graph[u][i];
          sub[nd][v] = 1;
        }
        */
      }
      
      init();
      
      ok = min(ok, dfs(nd));

      if(!ok)
      {
        /*for(int i = 1 ; i <= n ; ++i)
        {
          sub[nd][i] = 0;
        }*/
        sub[nd] = 0;
        graph[nd].clear();
        
        inh[name] = 0;
        nd--;

        cout << "greska\n";
        continue;
      }
      
      ok = diamond(nd);
 
      if(!ok)
      {
        sub[nd] = 0;
        /*
        for(int i = 1 ; i <= n ; ++i)
        {
          sub[nd][i] = 0;
        }
        */
        graph[nd].clear();
        inh[name] = 0;
        nd--;
 
        cout << "greska\n";
        continue;
      }/**/

      cout << "ok\n";
    }
  }
}

Compilation message

dijament.cpp: In function 'int diamond(int)':
dijament.cpp:64:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0 ; i < graph[u].size() ; ++i)
                   ~~^~~~~~~~~~~~~~~~~
dijament.cpp:68:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j = i + 1 ; j < graph[u].size() ; ++j)
                         ~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 7 ms 376 KB Output is correct
7 Correct 7 ms 380 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 7 ms 376 KB Output is correct
7 Correct 7 ms 380 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
11 Incorrect 2 ms 376 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 907 ms 6620 KB Output isn't correct
2 Halted 0 ms 0 KB -