POJ3697
/*
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的更多相关文章
- POJ3697+BFS+hash存边
/* 疾速优化+hash存边 题意:给定一个包含N(1 ≤ N ≤ 10,000)个顶点的无向完全图,图中的顶点从1到N依次标号.从这个图中去掉M(0 ≤ M ≤ 1,000,000)条边,求最后与顶 ...
- POJ3697【BFS】
题意: n个点的完全图,删掉m条边以后,求与1联通的点的个数. 思路: 直接判断 遍历图,n(n+1)/2=5e7 复杂度n^2......,哦,这样也行... //#include<bits/ ...
随机推荐
- 6.Spring【AOP】XML方式
1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切 ...
- linux系统下重要的分区及其作用
下面列出来的是linux系统下重要的分区及其作用/bin :bin是binary的缩写;/boot :存放启动Linux时使用的一些核心文件;/root :root(超级管理员)的用户主目录;/sbi ...
- HDU 6003 Problem Buyer
贪心题(好久不做了) 题解 考虑最一般的,判断合法性? 经典贪心问题:左端点升序,左端点相同,右端点降序,c[i]升序 优先队列,每次选择覆盖x的右端点最小的区间. 称此方法为“区间匹配贪心” 最小的 ...
- Make the Most (Hackerrank Codeagon)
题目链接 Problem Statement Codenation is sending N of its employees to a High Profile Business Conferenc ...
- 一维、二维数组 与 常用的返回数组 以及 fetch_all与fetch_row的区别
一维数组:单行单列的数组. 二维数组:多行多列的数组. (至少两行两列) 索引数组: fetch_all() 返回所有数组 fetch_row() 返回一行或一列数组 (第二行需要输入两 ...
- bootstrab table+表格 select可编辑完整实例
先看下效果图: ============================================================================================ ...
- WPF 禁用中文
<TextBox InputMethod.IsInputMethodEnabled="False" />
- 在线模拟http-post请求
今天,要测试一个post请求的API,找了下,下面的网站可以直接利用起来,mark下 http://www.atool.org/httptest.php
- 9.2专项测试-Android性能测试黑盒分析-1
1. 专项测试 业务测试:面向新需求 回归测试:面向已交付需求 专项测试:面向非功能需求的各类质量唯独特征 表现 用户维度 技术维度 崩溃 crash,弱网 检测崩溃1.某个页面,因为研发处理不合适, ...
- c++设计模式:策略模式
1.主要思想:例如针对不同的算法,创建不同的类. #include <iostream> using namespace std; // The abstract strategy cla ...