1. /*
  2. Memory Time
  3. 7096K 2641MS
  4. */
  5.  
  6. #include <iostream>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. #define HASHLEN 1000117
  12. #define DEMNUM 1000001
  13.  
  14. int hashTable[HASHLEN];
  15. int factor = ;
  16.  
  17. int pcs[];
  18.  
  19. struct Node {
  20. int a;
  21. int b;
  22. int next;
  23. };
  24. Node dam_node[DEMNUM];
  25.  
  26. int myq[DEMNUM];
  27.  
  28. inline int is_demaged(int a, int b) {
  29.  
  30. int idx = hashTable[(a * factor + b) % HASHLEN];
  31. while (idx > ) {
  32. if (dam_node[idx].a == a && dam_node[idx].b == b) {
  33. return ;
  34. }
  35. idx = dam_node[idx].next;
  36. }
  37. return ;
  38. }
  39.  
  40. int main() {
  41. int case_i = ;
  42. int pc_num = , dam_num = , i, j, num, pca, pcb, head, tail, hVal, idx, flag;
  43. while(scanf("%d %d", &pc_num, &dam_num) && !(pc_num == && dam_num == )) {
  44.  
  45. memset(hashTable, 0x00, sizeof(hashTable));
  46. memset(pcs, 0x00, sizeof(pcs));
  47. for (i = ; i <= dam_num; i++) {
  48. //input data
  49. scanf("%d %d", &pca, &pcb);
  50. if (pca < pcb) {
  51. dam_node[i].a = pca;
  52. dam_node[i].b = pcb;
  53. hVal = (pca * factor + pcb) % HASHLEN;
  54. } else {
  55. dam_node[i].a = pcb;
  56. dam_node[i].b = pca;
  57. hVal = (pcb * factor + pca) % HASHLEN;
  58. }
  59. dam_node[i].next = ;
  60.  
  61. //create hash table
  62. idx = hashTable[hVal];
  63. if (idx > ) {
  64. dam_node[i].next = idx;
  65. hashTable[hVal] = i;
  66. } else {
  67. hashTable[hVal] = i;
  68. }
  69. }
  70.  
  71. num = ;
  72. head = ;
  73. tail = ;
  74. for (i = ; i <= pc_num; i++) {
  75. if (!is_demaged(,i)) {
  76. myq[(tail++) % DEMNUM] = i;
  77. num++;
  78. pcs[i]=;
  79. }
  80. }
  81. while(head!=tail) {
  82. int v = myq[(head++) % DEMNUM];
  83. for (j = ; j <= pc_num; j++) {
  84. if (pcs[j]== || v == j) continue;
  85. if (v < j) {
  86. flag = is_demaged(v,j);
  87. } else {
  88. flag = is_demaged(j,v);
  89. }
  90. if (!flag) {
  91. pcs[j]=;
  92. myq[(tail++) % DEMNUM] = j;
  93. num++;
  94. }
  95. }
  96. }
  97. printf("Case %d: %d\n", ++case_i, num);
  98. }
  99. }

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. Python中的urlparse、urllib抓取和解析网页(一)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  2. 【踩坑】nextSibling 和nextElementSibling的区别

    DOM 使用nextSibling属性返回指定节点之后的下一个兄弟节点,(即:相同节点树层中的下一个节点). nextSibling属性与nextElementSibling属性的差别: nextSi ...

  3. Spring MVC(一)--SpringMVC的初始化和流程

    SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成: Model:模型层,一般由java bean完成,主要是进行数据库操作: View:视图层,用于前端展示 ...

  4. PAT甲级——A1044 Shopping in Mars

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  5. Consul3-使用consul作为配置中心

    在前面的文章中学习了consul在windows下的安装配置,然后consul作为spring boot的服务发现和注册中心,详细的参考: https://blog.csdn.net/j9038291 ...

  6. Leetcode137. Single Number II只出现一次的数字2

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: ...

  7. swiper 报错 ‘ Can't find variable: Dom7’

    一般报这个错是因为浏览器兼容问题,例如低版本的IE 现在通过npm install swiper 安装的版本都是4.x的 我的解决方法就是安装低版本的swiper, npm install swipe ...

  8. 在VUE中实现打印

    1.安装 npm install vue-print-nb --save 2.在mian.js中引入 import Print from 'vue-print-nb' Vue.use(Print); ...

  9. hdu 1166 敌兵布阵(线段树区间求和)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. 读书笔记--Head First 面向对象分析与设计 目录

    1.良好应用程序的基石 2.收集需求 3.需求变更 4.分析 5.良好的设计=灵活的软件 6.解决大问题 7.架构 8.设计原则 9.迭代与测试 10.OOA&D 的生命周期 附录1 附录2