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)的更多相关文章

  1. poj 1182 食物链 &amp;&amp; nyoj 207(种类并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52414   Accepted: 15346 Description ...

  2. POJ 1182 食物链(带权并查集)

    传送门 食物链  Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65579   Accepted: 19336 Descri ...

  3. bzoj4562: [Haoi2016]食物链--记忆化搜索

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

  4. 食物链 poj 1182

    C - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  5. POJ 1182 食物链(种类并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63592   Accepted: 18670 Description ...

  6. NYOJ 45 棋盘覆盖 模拟+高精度

    题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...

  7. POJ 1182 食物链 -- 解题报告

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70529   Accepted: 20875 Description ...

  8. PAT-L3-球队“食物链”-dfs-状压-set

    题目分析: 1. 一场双循环赛制的篮球赛,注意双循环,双循环! 2. 共有n只球队,两两之间有胜有负有平局: 3. 输入: 举例: 第一行:W:代表球队1打赢过这只队伍 L:代表球队2没打赢过这只队伍 ...

  9. 食物链-HZUN寒假集训

    食物链 总时间限制: 1000ms 内存限制: 65536kB 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动 ...

随机推荐

  1. 解决Android SDK Manager无法更新下载

    Android Studio2.2版本有一个bug,当在gradle文件编写代码时,程序会自动同步编译,这时整个程序都处于页面卡顿状态,要等待很久才能缓过来.最近实在忍受不了这种龟速,刚好发现有了新的 ...

  2. centos7 安装zookeeper3.4.8集群

    1.下载上传文件到centos中 2.解压文件夹 3.cd conf 文件下,cp  zoo_sample.cfg  zoo.cfg 4.vim zoo.cfg # The number of mil ...

  3. javaWeb的基础知识

    在服务器中,端口号是比较重要的,要学会查看和修改.win7有cmd和任务管理器两种方法.同时区分include动作和指令. <%@ include file="url"> ...

  4. Code Labels

    Code Labels Code labels are three-letter codes with which commit messages can be prefixed. CODE Labe ...

  5. 【PPT大放送】MPD软件工作坊北京站圆满落幕 深圳站即将开幕!

    MPD工作坊深圳站体验票开启啦!文末有彩蛋哦! 7月14日至15日,由麦思博(msup)有限公司举办的第40届MPD软件工作坊在北京国家会议中心举行. 麦思博(msup)有限公司一直专注于软件研发中心 ...

  6. robot framework教程-------虫师

    http://www.testclass.net/2017/09/28/happy-holidays/

  7. 【每日一题】Flooded! UVA - 815 模拟阅读格式题

    https://cn.vjudge.net/problem/UVA-815 题意:给你一个矩阵,每个格子的数代表一个海拔并且每个格子的面积100平方米.给你整个区域的降水量(立方米),问降水量(米). ...

  8. 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解

    https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...

  9. Django:视图views(一)

    1.环境搭建 在django中,视图负责与web请求进行交互 视图本质上是一个Python函数,定义在booktest/views.py.通过django1/urls.py路由到该视图中. 首先经过创 ...

  10. arcgis二次开发遇到System.Runtime.InteropServices.COMException (0x80040228) :异常来自HRESULT:0x80040228

    出现此问题只需要在控件上拖入一个LicenseControl就可以了 参考资料:http://yaogu.blog.163.com/blog/static/1849990662012101283256 ...