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编号.每个动 ...
随机推荐
- actor 内最好不要阻塞
1. 在使用 akka cluster singleton 时,我需要知道被创建的 singleton proxy 的 actorRef,通过绝对路径加 actorSelection 方法,应该很容易 ...
- css布局 - 垂直居中布局的一百种实现方式(更新中...)
首先将垂直居中的现象和实现方式两大方向细分类如下: 接下来逐条累加不同情况下的垂直居中实现. 目录: 一.父元素高度固定时,单行文本 | 图片的垂直居中 1. line-height行高简单粗暴实现法 ...
- [原]CentOS 7 网卡子接口的创建
OS:CentOS 7 在linux上创建vlan需要加载802.1q模块: 1.检测OS是否已经加载802.1q模块 [root@controller ~]# modinfo 8021q filen ...
- DrawerLayout 设置为滑动范围全盘
public void setDrawerLeftEdgeSize(DrawerLayout drawerLayout, float displayWidthPercentage) { if (dra ...
- vs2017企业版本安装和序列号
离线包大概下载为19G,可以选择的选择项很多,很不错,安装如下: 安装完成 启动效果 SharePoint插件自带了 离线包(19G) Visual Studio 2017(VS2017) 企业版En ...
- ES6 的模块系统
原文地址:https://hacks.mozilla.org/2015/08/es6-in-depth-modules/ ES6 是 ECMAScript 第 6 版本的简称,这是新一代的 JavaS ...
- 重装win7,win10,Ubuntu
使用的软件多了,大了,感觉用起来很卡,快就是生产力,一定要重视.就去维修电安装了120G的固态硬盘,以前所安装的软件都没有了,距上一次重装快一年了,上次修了风扇,加了4G内存条.现在很多东西也一并删除 ...
- Flask web开发之路十三
g对象 ### 保存全局变量的g属性:g:global1. g对象是专门用来保存用户的数据的.2. g对象在一次请求中的所有的代码的地方,都是可以使用的. 项目结构: g_demo.py文件代码: f ...
- Flask----基础
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- STL 标准模板库
<vector> 可变长的数组 Vector<int>v int是一个模板参数,这样传进来的都会是int V.push_back(a)将a传进v,且放在最后一个 V.clear ...