hdu 5277 YJC counts stars(邻接表+构造)
来源:互联网 发布:网络客服发展前景 编辑:程序博客网 时间:2024/04/29 21:53
题意:
给出n个点和m条边,题目保证任意两条边如果相交那么交点一定是两条线段的端点。定义dujiao点集为点集中任意两点均连成线段。求所有的dujiao点集中点的个数最大是多少个,并输出有多少个点数个数最大的dujiao点集
解析:
根据题意,不难想到dujiao点集最多只有4个点,那么有4种情况需要考虑:
1. 如果最大为4,先构造4个点的图形,枚举一条边bc和一个顶点a构造出一个三角形,然后以该三角形为基础,枚举一个点a,判断该点是否和其他3个点联通,这样就构造出4个点的dujiao点集。
2. 如果最大为3,那么就可以枚举一条边,然后再枚举点就可以了。
3. 如果最大为2,就输出边数。
4. 如果最大为1,就输出点的个数。
总结:
i 和 j 写反了调试了好久。
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>using namespace std;typedef long long ll;const int N = 1010;struct Edge { int u, v;};struct Tria { int a, b, c;};bool vis[N][N];vector<Tria> tria;vector<int> G[N];vector<Edge> edge;int n, m;void init() { memset(vis, false, sizeof(vis)); tria.clear(); edge.clear(); for(int i = 0; i <= n; i++) { G[i].clear(); }}void addEdge(int u, int v) { G[u].push_back(v);}int main() { int x, y, u, v; int cnt[5], a, b, c; while(scanf("%d%d", &n, &m) != EOF) { init(); for(int i = 0; i < n; i++) { scanf("%d%d", &x, &y); } for(int i = 0; i < m; i++) { scanf("%d%d", &u, &v); edge.push_back((Edge){u, v}); addEdge(u, v); addEdge(v, u); vis[u][v] = vis[v][u] = true; } for(int i = 0; i < edge.size(); i++) { a = edge[i].u, b = edge[i].v; for(int j = 0; j < G[a].size(); j++) { c = G[a][j]; if(c != b && vis[b][c]) { tria.push_back((Tria){a, b, c}); } } } cnt[2] = m; cnt[3] = tria.size(); cnt[4] = 0; for(int i = 0; i < tria.size(); i++) { a = tria[i].a , b = tria[i].b, c = tria[i].c; for(int j = 0; j < G[a].size(); j++) { int d = G[a][j]; if(d == b || d == c) continue; if(vis[b][d] && vis[c][d]) { cnt[4]++; } } } if(cnt[4] > 0) { printf("4 %d\n", cnt[4]/12); }else if(cnt[3] > 0) { printf("3 %d\n", cnt[3]/3); }else if(cnt[2] > 0) { printf("2 %d\n", cnt[2]); }else { printf("1 %d\n", n); } } return 0;}
0 0
- hdu 5277 YJC counts stars(邻接表+构造)
- hdu 5277 YJC counts stars
- hdu 5277 YJC counts stars
- HDU 5277 YJC counts stars 数星星
- hdu 5277(BestCoder Round#46 1002)YJC counts stars
- HDU 5277 YJC counts stars (二维平面图求最大团)
- HDU 5277 YJC counts stars 最大团+暴力
- HDOJ-5277 YJC counts stars(DFS)
- hdu5277 YJC counts stars(最大团)
- 平面图最大团 HDOJ 5277 YJC counts stars
- HDU5277 YJC counts stars (图论知识平面图)
- 构造邻接表
- hdu 5278 YJC plays automaton
- hdu 5278 YJC plays automaton
- HDU 5276 YJC tricks time
- 简单邻接表构造图
- hdu 4486 pen counts
- hdu 4486 Pen Counts
- ubuntu常用文件搜索命令
- Genymotion与ova包(2015.06)
- linux下安装mysql
- Objective-C(十三、字典类)——iOS开发基础
- 如何下载spring框架开发包
- hdu 5277 YJC counts stars(邻接表+构造)
- 打破“创新困局”,让你的企业创意盎然的六个新角色
- curl
- IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
- php开发环境搭建
- java基础——java的三大基本特征(继承、抽象、多态)
- 【BZOJ】1007 水平可见直线
- 校园一卡通的快速破解
- Implement Stack using Queues 用队列实现栈