/*
Memory Time
7096K 2641MS
*/ #include <iostream>
#include <string> using namespace std; #define HASHLEN 1000117
#define DEMNUM 1000001 int hashTable[HASHLEN];
int factor = ; int pcs[]; struct Node {
int a;
int b;
int next;
};
Node dam_node[DEMNUM]; int myq[DEMNUM]; inline int is_demaged(int a, int b) { int idx = hashTable[(a * factor + b) % HASHLEN];
while (idx > ) {
if (dam_node[idx].a == a && dam_node[idx].b == b) {
return ;
}
idx = dam_node[idx].next;
}
return ;
} int main() {
int case_i = ;
int pc_num = , dam_num = , i, j, num, pca, pcb, head, tail, hVal, idx, flag;
while(scanf("%d %d", &pc_num, &dam_num) && !(pc_num == && dam_num == )) { memset(hashTable, 0x00, sizeof(hashTable));
memset(pcs, 0x00, sizeof(pcs));
for (i = ; i <= dam_num; i++) {
//input data
scanf("%d %d", &pca, &pcb);
if (pca < pcb) {
dam_node[i].a = pca;
dam_node[i].b = pcb;
hVal = (pca * factor + pcb) % HASHLEN;
} else {
dam_node[i].a = pcb;
dam_node[i].b = pca;
hVal = (pcb * factor + pca) % HASHLEN;
}
dam_node[i].next = ; //create hash table
idx = hashTable[hVal];
if (idx > ) {
dam_node[i].next = idx;
hashTable[hVal] = i;
} else {
hashTable[hVal] = i;
}
} num = ;
head = ;
tail = ;
for (i = ; i <= pc_num; i++) {
if (!is_demaged(,i)) {
myq[(tail++) % DEMNUM] = i;
num++;
pcs[i]=;
}
}
while(head!=tail) {
int v = myq[(head++) % DEMNUM];
for (j = ; j <= pc_num; j++) {
if (pcs[j]== || v == j) continue;
if (v < j) {
flag = is_demaged(v,j);
} else {
flag = is_demaged(j,v);
}
if (!flag) {
pcs[j]=;
myq[(tail++) % DEMNUM] = j;
num++;
}
}
}
printf("Case %d: %d\n", ++case_i, num);
}
}

POJ3697的更多相关文章

  1. POJ3697+BFS+hash存边

    /* 疾速优化+hash存边 题意:给定一个包含N(1 ≤ N ≤ 10,000)个顶点的无向完全图,图中的顶点从1到N依次标号.从这个图中去掉M(0 ≤ M ≤ 1,000,000)条边,求最后与顶 ...

  2. POJ3697【BFS】

    题意: n个点的完全图,删掉m条边以后,求与1联通的点的个数. 思路: 直接判断 遍历图,n(n+1)/2=5e7 复杂度n^2......,哦,这样也行... //#include<bits/ ...

随机推荐

  1. 史上最直接小白式的Sourcetree的分支创建与合并

    一.Sourcetree简单介绍通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的. Sourcetree则可以与Git结合,提供图形界面,使 ...

  2. XAMPP:继MAMP之后,Mac OS X平台下又一款帮你快速搭建服务器环境软件

    之前,有很多人都有打算在自己的Mac OS下搭建一个本地测试用的Apache+PHP+MySQL网络服务器环境. 在目前而言至少有3种办法可以实现这一点: 通过Xcode开发者套件和php.Apach ...

  3. Tomcat6 配置快逸报表

    一.下载快逸报表程序,安装并创建报表 thunder://QUFodHRwOi8vZnRwY25jLXAyc3AucGNvbmxpbmUuY29tLmNuL3B1Yi9kb3dubG9hZC8yMDE ...

  4. 深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)[转]

    这一节主要是谈谈读写锁的实现. 上一节中提到,ReadWriteLock看起来有两个锁:readLock/writeLock.如果真的是两个锁的话,它们之间又是如何相互影响的呢? 事实上在Reentr ...

  5. 使用Hilo.JS快速开发Flappy Bird

    http://hiloteam.github.io/tutorial/flappybird.html#_9 Flappy Bird是一款前不久风靡世界的休闲小游戏.虽然它难度超高,但是游戏本身却非常简 ...

  6. line-height:2和line-height:2em的区别,它们是有区别的

    line-height:2是2倍的意思,如果内部有不同大小文字的情况下,以最大文字为倍数. line-height:2em也是2倍文字大小的意思,但如果内部有大文字,它还是会以父容 器的大小来计算. ...

  7. Redis消息通知

    Redis的消息通知通过列表类型实现,分为两种模式:阻塞式.发布/订阅式: 阻塞式 顾名思义,消息生产者负责生产消息,并将消息放到队列的一端,消息的消费者负责消费消息,从队列的另一端取出消息,然后对其 ...

  8. 过滤html标签的一个函数

    str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…', '&'), ar ...

  9. 再也不怕数据丢失!阿里云RDS MySQL 8.0上线回收站功能

    背景 MySQL 在生产环境使用过程中,会伴随着开发和运维人员的误操作,比如 DROP TABLE / DATABASE,这类 DDL 语句不具有可操作的回滚特性,而导致数据丢失,AliSQL 8.0 ...

  10. 微信小程序滚动到某个位置添加class效果。

    <scroll-view scroll-y="true" style="height:100vh;" bindscrolltoupper="up ...