派閥
解法
知り合い関係をbool g[12][12]で記録(n番とm番が知り合いならg[n][m] = g[m][n] = true)。
それぞれの議員について、以下のように「その議員を入れた派閥で最大のものの人数」を求めていく。
派閥をvector
1. まず議員を一人vに入れる(この人を含めた派閥で最大のものを考える)。
2. まだチェックしていない議員について、派閥全員と知り合いならその人を派閥に入れる。
3. 2を繰り返す。
各議員についてこれを繰り返して、vが一番長かったときの長さを答えとしています。
計算量はN^2。
// ABC002 D
#include <bits/stdc++.h>
#define REP(i,n) for(int i = 0; i < (int)(n); ++i)
using namespace std;
bool g[12][12];
int main(){
int N, M;
cin >> N >> M;
REP(i,M){
int x, y;
cin >> x >> y;
x--; y--;
g[x][y] = true; g[y][x] = true;}
int ans = 0;
REP(i,N){
vector v;
v.push_back(i);
REP(j,N){
int l = v.size();
int c = 0;
for(int i = 0; i < v.size(); i++) {
if(g[v[i]][j]) c++;}
if(c == l){
v.push_back(j);}}
if(ans < v.size()) ans = v.size();}
cout << ans << endl;
return 0;
}
0 件のコメント:
コメントを投稿