제출 #583448

#제출 시각아이디문제언어결과실행 시간메모리
583448TimDee슈퍼트리 잇기 (IOI20_supertrees)C++14
0 / 100
185 ms22100 KiB
#include "supertrees.h"

#include <bits/stdc++.h>
using namespace std;
#define forn(i,n) for (int i=0; i<n; ++i)
#define all(a) a.begin(), a.end()
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define pi pair<int,int>
#define f first
#define s second

int mirror(vector<vector<int>>&a) {
  int n=a.size();
  for (int i=0; i<n; ++i) {
    for (int j=i+1; j<n; ++j) {
      if (a[i][j]!=a[j][i]) return 0;
    }
  }
  return 1;
}

int construct(std::vector<std::vector<int>> p) {
  int n = p.size();
  
  vector<vector<int>> a(n); 
  forn(i,n) a[i].assign(n,0);

  if (!mirror(p)) return 0;

  queue<int> q;
  q.push(0);

  vector<pair<int,int>> edges;
  vector<int> vis(n,0);

  while (!q.empty()) {

  int v=q.front(); q.pop();
  if (vis[v]) continue;

  vis[v]=1;

  vector<int> one, two;
  for (int i=0; i<n; ++i) {
    if (vis[i]) continue;
    if (p[v][i]==1) one.pb(i);
    else if (p[v][i]==2) two.pb(i);
    else q.push(i);
  }

  for (int i=0; i<one.size(); ++i) {
    for (int j=i+1; j<one.size(); ++j) {
      if (p[i][j]!=1) return 0;
    }
  }

  pi P = {-1,-1};

  if (!two.size()) continue;
  if (two.size()==1) return 0;
  for (int i=0; i<two.size(); ++i) {
    for (int j=i+1; j<two.size(); ++j) {
      if (p[two[i]][two[j]]==2) P={two[i],two[j]};
    }
  }

  if (P.f==-1 && P.s==-1) return 0;

  int X=P.f, Y=P.s;
  vis[X]=vis[Y]=1;
  edges.pb(mp(v,X)); edges.pb(mp(v,Y)); edges.pb(mp(X,Y));

  for (auto u:two) {
    vis[u]=1;
    if (u==X || u==Y) continue;
    if (p[X][u]==p[Y][u]) return 0;
    if (p[X][u]==1) edges.pb(mp(X,u));
    else edges.pb(mp(Y,u));
  }

  }

  for (auto E:edges) {
    int u=E.f, v=E.s;
    a[u][v]=1;
    a[v][u]=1;
  }

  build(a);
  return 1;
}

컴파일 시 표준 에러 (stderr) 메시지

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:52:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |   for (int i=0; i<one.size(); ++i) {
      |                 ~^~~~~~~~~~~
supertrees.cpp:53:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int j=i+1; j<one.size(); ++j) {
      |                     ~^~~~~~~~~~~
supertrees.cpp:62:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |   for (int i=0; i<two.size(); ++i) {
      |                 ~^~~~~~~~~~~
supertrees.cpp:63:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |     for (int j=i+1; j<two.size(); ++j) {
      |                     ~^~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...