分值 : 25 难度 : 中等题 思路 : 对于他给出的点集合,先判断他是否内部任意两个都是连通的,然后再判断点集以外的点是否 有和点集以内的都联通的点. 坑点 :
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
#include <iostream>#include <vector>using namespace std;int data[201][201];int main() { int Nv , Ne ; cin >> Nv>> Ne ; for(int i = 0 ; i< Ne ; i++) { int c1 , c2 ; cin >> c1 >>c2 ; data[c1][c2] = data[c2][c1] =1 ; } int K ; cin >> K; //cout <<" K" << K <<endl ; for(int i = 0 ; i< K ;i++) { int count ,isclique= 1 , isMaxiaml = 1; cin >> count ; vector<int> db ; vector<int> hash(Nv+1, 0); for(int j = 0 ; j < count ; j++) { int temp=0; cin >> temp ; hash[temp] =1 ; if(isclique) { for(int ii = 0 ; ii< db.size() ; ii++) { if(data[temp][db[ii]] == 0) { //cout << temp <<" "<<db[ii] <<endl ; isclique=0 ; cout <<"Not a Clique"<<endl ; break ; } } } db.push_back(temp); } if(isclique == 0 ) continue ; for(int j = 1 ; j<=Nv ; j ++ ) { if(hash[j] == 0) { for(int ii = 0 ; ii< db.size() ; ii++) { if(data[j][db[ii]] == 0) //和一个点不相连 就不用查了 break ; if(ii == db.size()-1 ) //如果j 和db内所有点都相连,显然j可以加入 isMaxiaml = 0 ; } } } if(isMaxiaml) cout <<"Yes"<<endl ; else cout <<"Not Maximal"<<endl ; }}