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/ ...
随机推荐
- Python中的urlparse、urllib抓取和解析网页(一)
对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...
- 【踩坑】nextSibling 和nextElementSibling的区别
DOM 使用nextSibling属性返回指定节点之后的下一个兄弟节点,(即:相同节点树层中的下一个节点). nextSibling属性与nextElementSibling属性的差别: nextSi ...
- Spring MVC(一)--SpringMVC的初始化和流程
SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成: Model:模型层,一般由java bean完成,主要是进行数据库操作: View:视图层,用于前端展示 ...
- PAT甲级——A1044 Shopping in Mars
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- Consul3-使用consul作为配置中心
在前面的文章中学习了consul在windows下的安装配置,然后consul作为spring boot的服务发现和注册中心,详细的参考: https://blog.csdn.net/j9038291 ...
- Leetcode137. Single Number II只出现一次的数字2
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: ...
- swiper 报错 ‘ Can't find variable: Dom7’
一般报这个错是因为浏览器兼容问题,例如低版本的IE 现在通过npm install swiper 安装的版本都是4.x的 我的解决方法就是安装低版本的swiper, npm install swipe ...
- 在VUE中实现打印
1.安装 npm install vue-print-nb --save 2.在mian.js中引入 import Print from 'vue-print-nb' Vue.use(Print); ...
- hdu 1166 敌兵布阵(线段树区间求和)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 读书笔记--Head First 面向对象分析与设计 目录
1.良好应用程序的基石 2.收集需求 3.需求变更 4.分析 5.良好的设计=灵活的软件 6.解决大问题 7.架构 8.设计原则 9.迭代与测试 10.OOA&D 的生命周期 附录1 附录2