提出 #22134042


ソースコード 拡げる

#ifdef LOCAL
    #define _GLIBCXX_DEBUG
    #define __clock__
#else
    #pragma GCC optimize("Ofast")
#endif
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using VI = vector<ll>;
using VV = vector<VI>;
using VS = vector<string>;
using PII = pair<ll, ll>;

// #define INT128 // 必要なら有効化してください
#ifdef INT128
  using LL = __int128;
#endif

// tourist set
template <typename A, typename B>
string to_string(pair<A, B> p);

template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);

template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);

string to_string(const string& s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

string to_string(char c){
  string s = {c};
  return s;
}

// LL
#ifdef INT128
std::ostream &operator<<(std::ostream &dest, LL value) {
  std::ostream::sentry s(dest);
  if (s) {
    LL tmp = value < 0 ? -value : value;
    char buffer[128];
    char *d = std::end(buffer);
    do {
      --d;
      *d = "0123456789"[tmp % 10];
      tmp /= 10;
    } while (tmp != 0);
    if (value < 0) {
      --d;
      *d = '-';
    }
    int len = std::end(buffer) - d;
    if (dest.rdbuf()->sputn(d, len) != len) {
      dest.setstate(std::ios_base::badbit);
    }
  }
  return dest;
}
string to_string(LL v){
  stringstream ss;
  ss << v;
  return ss.str();
}
#endif // LL

string to_string(vector<bool> v) {
  bool first = true;
  string res = "{";
  for (int i = 0; i < static_cast<int>(v.size()); i++) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(v[i]);
  }
  res += "}";
  return res;
}

template <size_t N>
string to_string(bitset<N> v) {
  string res = "";
  for (size_t i = 0; i < N; i++) {
    res += static_cast<char>('0' + v[i]);
  }
  return res;
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")";
}

template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}

void debug_out() { cerr << '\n'; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}

#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
// tourist set end

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define rep(i,b) FOR(i, 0, b)
#define ALL(v) (v).begin(), (v).end()
#define p(s) cout<<(s)<<'\n'
#define p2(s, t) cout << (s) << " " << (t) << '\n'
#define SZ(x) ((int)(x).size())
#define SORT(A) sort(ALL(A))
#define RSORT(A) sort(ALL(A), greater<ll>())
#define MP make_pair
#define p_yes() p("Yes")
#define p_no() p("No")
#define p_possible() p("Possible")
#define p_impossible() p("Impossible")
void yes(){p_yes(); exit(0);}
void no(){p_no(); exit(0);}
void possible(){p_possible(); exit(0);}
void impossible(){p_impossible(); exit(0);}

ll SUM(VI& V){
  return accumulate(ALL(V), 0LL);
}

ll MIN(VI& V){return *min_element(ALL(V));}
ll MAX(VI& V){return *max_element(ALL(V));}

void print_vector(VI& V, ll offset=0){
  ll n = V.size();
  rep(i, n){
    if(i) cout << ' ';
    cout << V[i]+offset;
  }
  cout << endl;
}

ll gcd(ll a,ll b){
    if(b == 0) return a;
    return gcd(b,a%b);
}

ll lcm(ll a,ll b){
    ll g = gcd(a,b);
    return a / g * b;
}

// long double
using ld = long double;
#define EPS (1e-14)
#define equals(a,b) (fabs((a)-(b)) < EPS)

// 小さい順に取り出すpriority queue
using inverse_priority_queue = priority_queue<ll, vector<ll>, greater<ll> >;

int popcount(ll t){
    return __builtin_popcountll(t);
}

const ll mod = 1e9 + 7;
// const ll mod = 998244353;
const ll inf = 1e18;
const double PI = acos(-1);

// [a/b] (繰り上げ)
ll ceil_div(ll a, ll b){
  return (a+b-1)/b;
}

ll ll_pow(ll a, ll n){
    ll ans = 1;
    FOR(i, 0, n){
        ans *= a;
    }
    return ans;
}
// modなし

// snuke's mint
// auto mod int
// https://youtu.be/L8grWxBlIZ4?t=9858
// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize
// https://youtu.be/8uowVvQ_-Mo?t=1329 : division
// const int mod = 1000000007;
struct mint {
  ll x; // typedef long long ll;
  mint(ll x=0):x((x%mod+mod)%mod){}
  mint operator-() const { return mint(-x);}
  mint& operator+=(const mint a) {
    if ((x += a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator-=(const mint a) {
    if ((x += mod-a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator*=(const mint a) {
    (x *= a.x) %= mod;
    return *this;
  }
  mint operator+(const mint a) const {
    mint res(*this);
    return res+=a;
  }
  mint operator-(const mint a) const {
    mint res(*this);
    return res-=a;
  }
  mint operator*(const mint a) const {
    mint res(*this);
    return res*=a;
  }
  mint pow(ll t) const {
    if (!t) return 1;
    mint a = pow(t>>1);
    a *= a;
    if (t&1) a *= *this;
    return a;
  }

  // for prime mod
  mint inv() const {
    return pow(mod-2);
  }
  mint& operator/=(const mint a) {
    return (*this) *= a.inv();
  }
  mint operator/(const mint a) const {
    mint res(*this);
    return res/=a;
  }
};

//#include <atcoder/dsu>
//using namespace atcoder; // 忘れがち

VV load_graph(ll N, ll M){
  VV G(N);
  rep(i,M){
    ll a,b;cin>>a>>b;
    a--;b--;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  return G;
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N;cin>>N;
    auto G = load_graph(N, N-1);

    debug("graph loaded");

    // 深さを求めるdfs
    VI depth(N, -1);
    function<void(ll,ll,ll)> dfs_depth = [&](ll i, ll prev, ll dep){
      depth[i]=dep;
      for(ll to : G[i]){
        if(to==prev)continue;
        dfs_depth(to,i,dep+1);
      }
      return;
    };
    dfs_depth(0,-1,0);

    debug("dfs end");

    ll a=0;
    ll b=0;
    rep(i,N){
      if(depth[i]%2==0){
        a++;
      }else{
        b++;
      }
    }

    VI Ans;
    if(a>=b){
      // 0, 2, 4, ...
      rep(i,N){
        if(depth[i]%2==0)Ans.push_back(i);
      }
    }
    else{
      rep(i,N){
        if(depth[i]%2==1)Ans.push_back(i);
      }  
    }

    Ans.resize(N/2);
    print_vector(Ans, 1);

    
    return 0;
}

提出情報

提出日時
問題 026 - Independent Set on a Tree(★4)
ユーザ peroon
言語 C++ (GCC 9.2.1)
得点 4
コード長 7410 Byte
結果 AC
実行時間 64 ms
メモリ 17768 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:142:20: warning: statement has no effect [-Wunused-value]
  142 | #define debug(...) 42
      |                    ^~
./Main.cpp:301:5: note: in expansion of macro ‘debug’
  301 |     debug("graph loaded");
      |     ^~~~~
./Main.cpp:142:20: warning: statement has no effect [-Wunused-value]
  142 | #define debug(...) 42
      |                    ^~
./Main.cpp:315:5: note: in expansion of macro ‘debug’
  315 |     debug("dfs end");
      |     ^~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 4 / 4
結果
AC × 2
AC × 24
セット名 テストケース
Sample sample01.txt, sample02.txt
All corner01.txt, corner02.txt, max.txt, random00.txt, random01.txt, random02.txt, random03.txt, random04.txt, random05.txt, random06.txt, random07.txt, random08.txt, random09.txt, sample01.txt, sample02.txt, specific01.txt, specific02.txt, specific03.txt, specific04.txt, specific05.txt, specific06.txt, specific07.txt, specific08.txt, specific09.txt
ケース名 結果 実行時間 メモリ
corner01.txt AC 6 ms 3592 KiB
corner02.txt AC 2 ms 3640 KiB
max.txt AC 53 ms 10540 KiB
random00.txt AC 20 ms 5500 KiB
random01.txt AC 45 ms 9400 KiB
random02.txt AC 53 ms 10640 KiB
random03.txt AC 35 ms 7428 KiB
random04.txt AC 6 ms 3596 KiB
random05.txt AC 15 ms 5132 KiB
random06.txt AC 36 ms 7532 KiB
random07.txt AC 47 ms 10020 KiB
random08.txt AC 15 ms 4748 KiB
random09.txt AC 31 ms 6592 KiB
sample01.txt AC 8 ms 3572 KiB
sample02.txt AC 3 ms 3560 KiB
specific01.txt AC 64 ms 17768 KiB
specific02.txt AC 42 ms 11508 KiB
specific03.txt AC 54 ms 11172 KiB
specific04.txt AC 43 ms 10756 KiB
specific05.txt AC 46 ms 10944 KiB
specific06.txt AC 47 ms 11308 KiB
specific07.txt AC 44 ms 11648 KiB
specific08.txt AC 56 ms 15760 KiB
specific09.txt AC 57 ms 14944 KiB