hdu 2463
来源:互联网 发布:娃娃的书 知乎 编辑:程序博客网 时间:2024/06/07 15:24
题目意思是,给定一个去掉了一些边的完全图,问从顶点1可以到达多少个顶点,顶点1不算。
解题方法是hash表+bfs。hash表第i个元素记录第i个结点不能到达的点。bfs时应先排除当前结点的不能到达结点,而可到达结点直接入队即可。
算法比较暴力,时限也比较宽裕:
#include<cstdio>#include<cstring>#include<iostream>#include<utility>#include<string>#include<set>#include<vector>#include<stack>#include<algorithm>#include<queue>#include<cstdlib>#include<map>#include<cmath>using namespace std;#define FOR(i,a,b) for(int i(a);i<(b);i++)#define REP(i,n) FOR(i,0,n)#define CL(a,b) memset(a,b,sizeof(a))const int M=1000020;const int N=10010;const int inf=1<<29;const double eps=1e-8;const double pi=acos(-1.0);struct node{ int u,v; int next;}edge[3*M];int head[N],num;int que[N];bool vis[N],vv[N];int n,m;int ans;void init(){ for(int i=0;i<=n+1;i++) { head[i]=-1; vis[i]=0; } num=ans=0;}void addege(int u,int v){ edge[num].u=u; edge[num].v=v; edge[num].next=head[u]; head[u]=num++;}void check(int u){ for(int i=1;i<=n;i++) vv[i]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; vv[v]=1; }}void solve(){ int front=0,rear=0; que[rear++]=1; while(front<rear) { int u=que[front]; front++; check(u); for(int i=1;i<=n;i++) { if(!vv[i] && !vis[i]) { vis[i]=1; ans++; que[rear++]=i; } } }}int main(){ int cnt=1; while(scanf("%d%d",&n,&m)==2) { if(!n && !m) break; init(); int a,b; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); addege(a,b); addege(b,a); } vis[1]=1; solve(); printf("Case %d: %d\n",cnt++,ans); } return 0;}
- hdu 2463
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- jQuery EasyUI 的截图插件(imgAreaSelect)用法
- 自动触发事件--jQuery事件处理
- 说一下这学期(2011-2012)
- 合并两个线性表
- 可重入函数
- hdu 2463
- Facebook将如何拯救音乐产业
- Memory leaks using CVSListBox
- js回车提交事件
- Custom fonts since iPhone OS 3.2
- 单片机之中断
- learning jQuery 学习笔记二(+jQuery 1.4.1 API)--DOM遍历方法
- STL中map用法详解
- Android签名用keytool和jarsigner制作apk文件