NYOJ 食物链(WA)
1、WA代码
思路:预先分好3类,对每一行数据进行分类和真话假话判断
WA原因:前面某些行的数据 需要依赖 后面某些行给的数据 才能进行分类
初步改正思路( 对于前面给的无法直接分类的数据进行记录,等遇到合适的数据再拿出来进行分类 数据给完还无法分类的列为假话 )
未改正代码
- # include<iostream>
- # include<string>
- # include<string.h>
- # include<queue>
- # include<stdio.h>
- # include<math.h>
- #include <algorithm>
- using namespace std;
- #define MAX 50005
- //int rank[MAX];
- int pre[MAX];
- int tot,n;
- int flag[];
- struct Node
- {
- int a,b,c;
- }node;
- queue<Node> q;
- void Init()
- {
- for(int i=;i<=n+;i++) //pre[n+1]表示A类动物 pre[n+2]表示B类动物 pre[n+3]表示C类动物
- {
- pre[i] = i;
- //rank[i] = 1;
- }
- tot = ;
- flag[] = ; //表示尚无A类动物
- flag[] = ;
- flag[] = ;
- }
- int find(int x)
- {
- int p=x,t;
- while(pre[p]!=p) //x结点迭代往上寻找到祖宗结点 存储在p
- {
- p = pre[p];
- }
- while(x != p) // 把x结点到其祖宗结点中 经过的所有结点 都直接连到 祖宗结点
- {
- t = pre[x];
- pre[x] = p;
- x = t;
- }
- return x;
- }
- void Unite(int x,int y)
- {
- x = find(x);
- y = find(y);
- if(x==y)
- return;
- pre[x] = y;
- /*
- if(rank[x]<rank[y]) //高度小的为子树
- {
- pre[x] = y;
- }
- else
- {
- pre[y] = x;
- if(rank[x] == rank[y])
- rank[x]++;
- }
- */
- }
- void judge()
- {
- int ct=;
- while(!q.empty())
- {
- node = q.front();
- int a,b,c;
- a = node.a;
- b = node.b;
- c = node.c;
- int fb,fc,f=;
- fb = find(b);
- fc = find(c);
- //printf("%d %d %d %d %d %d\n",f,fb,fc,flag[0],flag[1],flag[2]);
- //printf("%d\n--------------------------------------\n",tot);
- if(ct>=) break;
- if(b>n || c>n ||b<= || c<=) //假话条件2判断
- {
- tot++;
- q.pop();
- continue;
- }
- if(a== && b==c) //假话条件3 =判断
- {
- tot++;
- q.pop();
- continue;
- }
- if(a==)
- {
- if( fb==b && fc==c ) //b,c编号动物都是第一次出现
- {
- for(int i=;i<;i++) //3个类别未满
- {
- if(flag[i]==)
- {
- //Unite(b,n+i+1);
- //Unite(c,n+i+1);
- pre[b] = n+i+;
- pre[c] = n+i+;
- flag[i] = ;
- f = ;
- q.pop();
- break;
- }
- }
- if(f==) continue;
- //类别已满
- q.push(node);
- ct++;
- }
- else if(fb==b && fc!=c) //b编号动物第一次出现,c编号动物已有分类
- {
- pre[b] = fc;
- flag[fc-n-] = ;
- q.pop();
- continue;
- }
- else if(fb!=b && fc==c) //c编号动物第一次出现,b编号动物已有分类
- {
- pre[c] = fb;
- flag[fb-n-] = ;
- q.pop();
- continue;
- }
- else //b,c编号动物都已分类
- {
- if(fb!=fc) //出现矛盾
- {
- tot++;
- q.pop();
- continue;
- }
- }
- }
- else
- {
- //printf("%d %d",b,c);
- if( fb==b && fc==c ) //b,c编号动物都是第一次出现
- {
- //printf("sddsgfdg");
- for(int i=;i<;i++) //3个类别未满
- {
- int j = (i+)%;
- if(flag[i]== && flag[j]==)
- {
- //Unite(b,n+i+1);
- //Unite(c,n+j+1);
- pre[b] = n+i+;
- pre[c] = n+j+;
- flag[i] = ;
- flag[j] = ;
- f = ;
- q.pop();
- break;
- }
- }
- if(f==) continue;
- //类别已满
- q.push(node);
- ct++;
- }
- else if(fb==b && fc!=c) //b编号动物第一次出现,c编号动物已有分类
- {
- if(fc==n+)
- {
- pre[b] = n+; //Unite(b,n+3);
- flag[] = ;
- q.pop();
- continue;
- }
- else if(fc==n+)
- {
- pre[b] = n+; //Unite(b,n+1);
- flag[] = ;
- q.pop();
- continue;
- }
- else if(fc==n+)
- {
- pre[b] = n+; //Unite(b,n+2);
- flag[] = ;
- q.pop();
- continue;
- }
- }
- else if(fb!=b && fc==c) //c编号动物第一次出现,b编号动物已有分类
- {
- if(fb==n+)
- {
- pre[c] = n+; //Unite(c,n+2);
- flag[] = ;
- q.pop();
- continue;
- }
- else if(fb==n+)
- {
- pre[c] = n+; //Unite(c,n+3);
- flag[] = ;
- q.pop();
- continue;
- }
- else if(fb==n+)
- {
- pre[c] = n+; //Unite(c,n+1);
- flag[] = ;
- q.pop();
- continue;
- }
- }
- else //b,c编号动物都已分类
- {
- if(fb-fc==- )
- {
- q.pop();
- continue;
- }
- else if(fb-fc== )
- {
- q.pop();
- continue;
- }
- tot++;
- q.pop();
- continue;
- }
- }
- }
- while(!q.empty())
- {
- tot++;
- q.pop();
- }
- }
- int main()
- {
- int k;
- scanf("%d %d",&n,&k);
- Init();
- int i,j;
- for(i=;i<k;i++)
- {
- int a,b,c;
- scanf("%d %d %d",&a,&b,&c);
- node.a = a;
- node.b = b;
- node.c = c;
- q.push(node);
- //printf("%d\n---------------------------\n",tot);
- }
- judge();
- printf("%d",tot);
- return ;
- }
2、
正确思路:不按照捕食关系进行细致分类,而是按照动物间存在关系就分为一类,用relation表示结点与父节点的关系
NYOJ 食物链(WA)的更多相关文章
- poj 1182 食物链 && nyoj 207(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52414 Accepted: 15346 Description ...
- POJ 1182 食物链(带权并查集)
传送门 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65579 Accepted: 19336 Descri ...
- bzoj4562: [Haoi2016]食物链--记忆化搜索
这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...
- 食物链 poj 1182
C - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- POJ 1182 食物链(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63592 Accepted: 18670 Description ...
- NYOJ 45 棋盘覆盖 模拟+高精度
题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...
- POJ 1182 食物链 -- 解题报告
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70529 Accepted: 20875 Description ...
- PAT-L3-球队“食物链”-dfs-状压-set
题目分析: 1. 一场双循环赛制的篮球赛,注意双循环,双循环! 2. 共有n只球队,两两之间有胜有负有平局: 3. 输入: 举例: 第一行:W:代表球队1打赢过这只队伍 L:代表球队2没打赢过这只队伍 ...
- 食物链-HZUN寒假集训
食物链 总时间限制: 1000ms 内存限制: 65536kB 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动 ...
随机推荐
- SpringMVC -- @RequestMapping -- 随记
@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestMappi ...
- day_6.17 gevent版服务器
用协程做并发服务器 gevent版本: monkey.patch_all() 修改了自己的代码 只能用mokey里面的代码 #!--*coding=utf-8*-- #2018-6-17 12:0 ...
- include_once与require_once的区别
①作用及用法 可以减少代码的重复 include(_once)("文件的路径")与require(_once)("文件的路径") ②理解 说白了,就是用包含进 ...
- 初窥scrapy爬虫
2017-10-30 21:49:55 前言: 初步使用scrapy爬虫框架,爬取各个网站信息 系统环境: 64位win10系统,装有64位python3.6,IDE为pycharm,使用cmd命令 ...
- 爬虫----爬虫请求库selenium
一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...
- GIT----玩转Git
版本控制 说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象! 1 2 3 4 5 6 7 8 9 10 11 毕业论文_初稿.doc 毕业论文_修改1.do ...
- 掌握业界最新工程实践 | 了解AIOps下一代微服务等最新趋势
近年来,IT应用越来越复杂,一旦出现故障,诊断越来越困难,使用传统技术来管理机器数据的组织会让其运维团队不堪重负.幸好随着大数据.机器学习和AI技术的飞速发展,智能化运维给这一现状带来了改变. 那么就 ...
- ROS中.launch文件的remap标签详解
https://www.cnblogs.com/LiuQiang921202/p/7679943.html
- CMake error with move_base_msgs问题解决
错误 CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake: (find_package): Could not f ...
- python中的os
import sys, os print(__file__) # 绝对路径,实际是文件名 /Users/majianyu/Desktop/test/bin/bin.py print(os.path.a ...