- 浏览: 120378 次
- 性别:
- 来自: 北京
最新评论
最大团模板
#include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <iostream> #include <algorithm> #include <vector> #include <map> #define out(v) cout << #v << ": " << (v) << endl #define MP(X,Y) make_pair(X,Y) using namespace std; typedef long long LL; // maximum clique // tested: hdu3585, zju1492, pku1129 // paper: A Fast Algorithm For The Maximum Clique Problem const int MAXN = 27; int n; bool G[MAXN][MAXN]; // indexed from one, adjacency matrix int list[MAXN][MAXN], degree[MAXN], behide[MAXN]; int found, curmax; void sortdegree() { for (int i = 1; i <= n; i++) { int k = i; for (int j = i + 1; j <= n; j++) if (degree[j] < degree[k]) k = j; if (k != i) { swap(degree[i], degree[k]); for (int t = 1; t <= n; t++) swap(G[i][t], G[k][t]); for (int t = 1; t <= n; t++) swap(G[t][i], G[t][k]); } } } void dfs(int d){ if (d - 1 > curmax) { found = 1; return; }; int i, j; for (int i = 1; i < list[d - 1][0] - curmax + d; i++) if (!found && d + behide[list[d - 1][i] + 1] > curmax && (list[d - 1][0] == i || d + behide[list[d - 1][i + 1]] > curmax)) { for (j = i + 1, list[d][0] = 0; j <= list[d - 1][0]; j++) if (G[list[d - 1][j]][list[d - 1][i]]) list[d][++list[d][0]] = list[d - 1][j]; if (list[d][0] == 0 || d + behide[list[d][1]] > curmax) dfs(d + 1); } } int solve() { for (int i = 1; i <= n; i++) { degree[i] = 0; for (int j = 1; j <= n; j++) degree[i] += G[i][j]; } sortdegree(); behide[n + 1] = 0; behide[n] = 1; for (int i = n - 1; i > 0; i--) { curmax = behide[i + 1]; found = list[1][0] = 0; for (int j = i + 1; j <= n; j++) if (G[j][i]) list[1][++list[1][0]] = j; dfs(2); behide[i] = curmax + found; } return behide[1]; } int set[MAXN]; int main() { char line[30]; while (scanf("%d", &n), n != 0) { memset(G, false, sizeof(G)); for (int i = 1; i <= n; ++i) { scanf("%s", line); int u = line[0] - 'A' + 1; set[i] = u; for (int j = 2; line[j]; ++j) G[u][line[j] - 'A' + 1] = true; } int cnt = solve(); printf("%d channel%s needed.\n", cnt, cnt == 1 ? "" : "s"); for (int i = 1; i <= list[1][0]; ++i) cout << char('A' + list[1][i] - 1) << " "; cout << endl; } return 0; }
发表评论
-
lower_bound and upper_bound
2012-02-09 00:36 1180/** * @brief Finds the ... -
HDU 3954
2012-02-05 10:43 861线段树变种,也是在2logn段上面做文章 /* * ... -
HDU 4027
2012-02-04 22:09 883线段树变种 在2logn段上面做文章,swap(x, y)太阴 ... -
ICPC编码建议
2011-10-28 09:52 934写代码最重要的是清晰,包括思路的清晰和代码结构的清晰。我们无法 ... -
[转载]TopCoder插件
2011-09-08 22:13 1005转载自:http://acm.cugb.edu.cn/blog ... -
UVALive 5112 - Sales Prediction
2011-01-06 10:19 1218封装了矩阵类 比赛做得很郁闷,为什么别人写得很长、很罗嗦的代码 ... -
hdu 3236
2010-12-12 14:10 823终于能过这道题了,算是背包必做题之一吧 /* * Au ... -
pku 1018
2010-12-11 15:18 643写了两三个版本,最后这个效率最高 #include < ... -
布斯(Booth)乘法
2010-10-07 19:59 1167源自http://watashi.ws/blog/1515/z ... -
高斯消元
2010-10-07 14:18 831import java.util.*; import j ... -
整数划分
2010-10-07 10:38 856#include <cstdio> #inc ... -
Treap
2010-09-18 22:19 1002// Treap // Tested: bjtu1057 ... -
矩阵快速幂
2010-09-18 14:24 1069typedef LL matrix[55][55]; ... -
计算Jacobi符号
2010-08-31 13:15 1330Quadratic reciprocity The Jacob ... -
Java 高效I/O
2010-08-19 16:54 805static BufferedReader cin = ... -
DLX pku 3076
2010-08-11 23:45 916标准数独,精确覆盖 // pku3076.cpp #in ... -
DLX hust 1017
2010-08-11 16:50 876“精确覆盖”问题 #include <cstdio& ... -
DLX hdu 3498
2010-08-11 16:48 1077“多重覆盖”或“重复覆盖”问题 #include < ... -
hdu 3509
2010-08-09 11:22 1022推导公式的题目,矩阵幂关键就在于构造系数矩阵 备忘: S(n, ... -
RMQ模板
2010-07-28 11:04 1216/* * Author: rush * Creat ...
相关推荐
最大团问题是图论中的一个经典问题,主要研究的是在一个无向图中找到具有最多顶点的完全子图,其中每两个顶点之间都存在边。这个完全子图就被称为最大团。在社会网络、计算机科学、化学等领域都有广泛应用,比如在...
在计算机科学与图论领域,最大团问题(Maximum Clique Problem)是一项经典而重要的课题。它涉及到在一个无向图中寻找最大的完全子图(即团),其中任意两个顶点之间都有边相连。这一问题不仅在理论研究上具有挑战性...
在计算机科学领域,最大团问题(Maximum Clique Problem, MCP)是一个经典的图论问题,它涉及到寻找一个无向图中最大的完全子图,即每个节点都与其他所有节点相连的子图。在MATLAB环境中解决这个问题可以采用不同的...
最大团分支限界法PPT 最大团问题是图论中一个著名的问题,目标是找到给定图中的最大完全子图。最大团问题可以使用分支限界法来解决,本文将详细介绍最大团问题的定义、问题分析、算法设计和算法实现。 1. 问题描述...
MCP函数(Maximum Clique Problem)是这个代码的核心部分,它接受一个无向图的邻接矩阵作为输入,通过递归回溯过程寻找可能的最大团。在回溯过程中,MCP函数会维护当前的团,以及所有可能的下一步选择。当找到一个更...
最大团问题(Maximum Clique Problem, MCP)是图论和组合优化领域中的一个经典问题,广泛应用于各种实际问题中,如社交网络分析、生物信息学、工业生产调度等。最大团问题是寻找一个图中最大的完全子图,即顶点之间...
最大团问题(Maximum Clique Problem, MCP)是图论中的一个重要且经典的组合优化问题,属于NP完全问题。该问题不仅在理论上有着重要的意义,在实际应用中也有着广泛的用途,如市场分析、方案选择、信号传输、计算机...
这个问题的重要性在于其在理论和应用上的广泛性,比如它可以转化为最大独立集(Maximum Independent Set,简称MIS)问题和最大团(Maximum Clique,简称MC)问题。此外,最小顶点覆盖问题是NP难问题,这意味着在...
最大集团 在计算机科学中,团问题是指与在图中查找特定完整子图(“团”)相关的任何问题,即每对元素连接的元素集。 例如,最大集团问题出现在以下现实世界中。 考虑一个社交网络,其中图的顶点代表人,图的边代表...
最大团问题(Maximum Clique Problem, MCP)作为图论中的一个经典组合优化问题,在理论研究和实际应用方面都具有重要意义。该问题属于NP完全问题,即它是难以在多项式时间内找到最优解的问题之一。尽管如此,由于其在...
最大团问题(Maximum Clique Problem, MCP)是图论中的一个重要问题,在计算机科学、社会网络分析、生物信息学等领域有着广泛的应用。MCP的目标是在给定的无向图\( G=(V,E) \)中找到一个最大的完全子图(即团)。这里...
蔡少伟最大团方法1是一种求解图论问题的算法,特别关注于寻找图的最大顶点覆盖(Maximum Vertex Cover, MVC)或最大团(Maximum Clique)。最大顶点覆盖问题是指在无向图中找到一个尽可能大的顶点子集,使得这个子...
最大团问题(Maximum Clique Problem,MCP)是图论中的一个重要问题,它在理论计算机科学领域具有非常重要的地位。最大团问题研究的内容是,在一个无向图中寻找最大的完全子图(即图中的一个团),其中任意两个不同...
最大团问题(Maximum Clique Problem, MCP)是组合数学和图论中的一个重要问题,属于NP-hard问题,即在多项式时间内很难找到一个图的最大团。一个图的“团”是指一个顶点的子集,其中任意两个顶点都相互连接。而...
- **最大团(Maximum Clique):** 所有团中顶点数最多的一个团被称为最大团。找到一个图的最大团是一个NP完全问题,但在特定类型的图中,如弦图,这个问题变得更为简单。 #### 图着色 - **最小染色(Minimum Coloring...
ACMC语言浙大模板 ACMC语言浙大模板是一种功能强大且实用的算法模板,包含了多种经典算法和...8. 最大团(Maximum Clique):最大团是一种图论问题,旨在找到图中的最大团。它可以用于解决资源分配和任务调度问题。
1. 最大权重团问题(Maximum Weight Clique,MWC):这是一个定义在加权图上的问题,其中每个顶点和每条边都有一个权重。目标是找到一个顶点子集,使得子集内的任意两个顶点都是相互连接的,并且子集的权重总和最大...