yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

AtCoder Beginner Contest 225 B - Star or Not

問題の要約
 N頂点N-1辺の木が与えられる。
 頂点は1,2,...,Nの番号がついており,i番目の辺は頂点aiと頂点biを結んでいる。
 この木がスターであるか判定しろ。
 ただしスターとは,1つの頂点から他の全ての頂点に1本ずつ辺が出ている木のことである。
制約
 3<=N<=10^5
 1<=ai<bi<=N
 与えられるグラフは木である。

入力
 N
 a1 b1
 .
 .
 . 
 aN-1 bN-1
考え方
 1,頂点の番号を1ずらす。
  1,2,...,N => 0,1,...,N-1
 2,木はN-1個の辺しかなく,スターならばその全ての辺が1つの頂点に繋がっているはずである。
  よって,グラフのデータ構造に辺を全て加えて,頂点の辺の数にN-1があればスターである。

実際のプログラム
#include<iostream>
#include<vector>

using namespace std;

vector<vector<long long>> T;

int main(){
  long long N;
  cin >> N;
  T.resize(N);
  for(long long i = 0; i < N-1; i++){
    long long a,b;
    cin >> a >> b;
    T[a-1].push_back(b-1);
    T[b-1].push_back(a-1);
  }
  
  bool star = false;
  for(long long i = 0; i < N; i++){
    if(T[i].size() == N-1){
      star = true;
      break;
    }
  }
  
  
  if(star){
    cout << "Yes" << endl;
  }else{
    cout << "No" << endl;
  }
  
  return 0;
}