hdu 5277 YJC counts stars
2015-07-05 20:05
387 查看
好像别人都是根据最大团为4来判断的。。。
然而根本不要那么麻烦,随便搞搞就过了。
然而根本不要那么麻烦,随便搞搞就过了。
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; struct edge { int v,next; }e[2000005]; int p[1005],ee,num[1005],n; bool ma[1005][1005],hav[1005]; vector<int> now; void addedge(int u,int v) { e[ee].v=v;e[ee].next=p[u];p[u]=ee++; e[ee].v=u;e[ee].next=p[v];p[v]=ee++; ma[u][v]=ma[v][u]=true; } bool judge (int u) { //判断加入u是否满足 int i,siz=now.size(); for(i=0;i<siz;i++) if(!ma[u][now[i]]) break; if(i!=siz) return false; return true; } void dfs (int u,int nu) { //nu是目前完全图的点数,u为现在考虑的点 now.push_back(u);hav[u]=true; //have表示改点是否在已选择的子图 num[nu]++; int i=p[u]; while(i!=-1) { if(hav[e[i].v]) {i=e[i].next;continue;} if(e[i].v>u&&judge(e[i].v)) //为了防重,只计算递增的 dfs(e[i].v,nu+1); i=e[i].next; } now.pop_back();hav[u]=false; } int main () { freopen("aa.txt","r",stdin); int m,x,y,i,u,v; while(~scanf("%d%d",&n,&m)) { memset(ma,false,sizeof(ma)); ee=0; for(i=1;i<=n;i++) { scanf("%d%d",&x,&y); p[i]=-1;num[i]=0;hav[i]=false; } for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); addedge(u,v); } for(i=1;i<=n;i++) dfs(i,1); for(i=n;i>=1;i--) if(num[i]!=0) break; cout<<i<<' '<<num[i]<<endl; } }
相关文章推荐
- ROS学习手记 - 2 Build Package 生成包
- 突然回到这里,瞅瞅还有几个鬼?
- 面试题34:丑数
- 面向接口编程(简单工厂模式)和单列设计模式
- C# 使用TraceSource记录程序日志(转载)
- [华为机试练习题]57.对象管理器
- 优化
- OSGI学习总结
- Xilinx_fpga 从串配置模式
- JVM基本原理
- 我的 Fedora 20 + django + nginx + uwsgi 配置
- 使用 Google V8 引擎开发可定制的应用程序
- Angular JS ng-app使用的注意事项
- Emmet:HTML/CSS代码快速编写器
- web页面中参数的传递方法
- require.js 应用实例
- redis 在windows上运行
- 插件式开发
- Android GPS架构分析(六)
- 网站分析数据收集方式详解Web日志JS标记和包嗅探器