zoukankan      html  css  js  c++  java
  • PAT 甲级 1142 Maximal Clique (25 分)

    思路:

    1.用map的映射关系存储邻接矩阵;
    2.先遍历所有给的点,比较是否邻接,以此判断是不是团;
    3.若是团,则遍历所有团中结点,若结点的相邻节点数不等于k-1,则删去团中k-1个结点,将剩下的结点与团中结点比较,比较是否都相邻;

    代码:

    #include<iostream>
    #include<vector>
    #include<unordered_set>
    using namespace std;
    int main(){
    	int nv,ne,m;
    	scanf("%d%d",&nv,&ne);
    	vector<unordered_set<int>> mat(nv+1);
    	for(int i=0;i<ne;i++){
    		int v1,v2;
    		scanf("%d%d",&v1,&v2);
    		mat[v1].insert(v2);
    		mat[v2].insert(v1);
    	}
    	scanf("%d",&m);
    	for(int i=0;i<m;i++){
    		int n,j,k;
    		scanf("%d",&n);
    		vector<int> v(n);
    		for(j=0;j<n;j++)
    			scanf("%d",&v[j]);
    		for(j=0;j<n-1;j++){
    			for(k=j+1;k<n;k++)
    				if(mat[v[j]].find(v[k])==mat[v[j]].end())
    					break;
    			if(k!=n) break;
    		}
    		if(j!=n-1){
    			printf("Not a Clique
    ");
    			continue;
    		}
    		vector<unordered_set<int>> mat1(mat);
    		for(auto e:v){
    			if(mat1[e].size()!=n-1){
    				for(j=0;j<n;j++)
    					if(v[j]!=e) mat1[e].erase(v[j]);
    				for(auto p:mat1[e]){
    					for(j=0;j<n;j++)
    						if(mat[p].find(v[j])==mat[p].end())
    							break;
    					if(j==n) break;
    				}
    				if(j==n) break;	
    			}
    		}
    		j==n?printf("Not Maximal
    "):printf("Yes
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    Python 爬虫简介
    Python 线程池(小节)
    Python platform 模块
    Python term 模块
    python 统计使用技巧
    ArcGIS中的WKID(转)
    c#二维码资料
    How to remove live visual tree?
    新书预告 ArcGIS跨平台开发系列第一本
    visual studio 中删除多余的空白行
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309088.html
Copyright © 2011-2022 走看看