zoukankan      html  css  js  c++  java
  • [BZOJ 2350] [Poi2011] Party 【Special】

    题目链接: BZOJ - 2350

    题目分析

    因为存在一个 2/3 n 大小的团,所以不在这个团中的点最多 1/3 n 个。

    牺牲一些团内的点,每次让一个团内的点与一个不在团内的点抵消删除,最多牺牲 1/3 n 个团内的点,至少剩余一个 1/3 n 的团。

    如果两个点之间没有边,那么至少有一个点在团外,删掉这两个点!

    代码

    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    const int MaxN = 3000 + 5;
    
    int n, m, Cnt;
    
    bool D[MaxN], Map[MaxN][MaxN];
    
    int main() 
    {
    	scanf("%d%d", &n, &m);
    	int a, b;
    	memset(Map, 0, sizeof(Map));
    	for (int i = 1; i <= m; ++i) {
    		scanf("%d%d", &a, &b);
    		Map[a][b] = Map[b][a] = true;
    	}
    	memset(D, 0, sizeof(D));
    	for (int i = 1; i <= n; ++i) 
    		if (!D[i]) 
    			for (int j = 1; j <= n; ++j) 
    				if (j != i && !D[j] && !Map[i][j]) {
    					D[i] = D[j] = true;
    					break;
    				}
    	Cnt = 0;
    	for (int i = 1; i <= n; ++i) {
    		if (D[i]) continue;
    		printf("%d", i);
    		if (++Cnt == n / 3) {
    			printf("
    "); break;
    		}
    		else printf(" ");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    asp.net web生命周期
    图的数据结构1
    最长公共子串
    内部排序

    棋盘覆盖问题
    队列
    矩阵连乘问题
    图的数据结构2
    旅行售货员问题
  • 原文地址:https://www.cnblogs.com/JoeFan/p/4239952.html
Copyright © 2011-2022 走看看