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编号.每个动 ...
随机推荐
- C语言的标准库和系统调用
http://blog.csdn.net/yusiguyuan/article/details/23181327 Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含 ...
- jenkins实战(二):构建自由风格的maven项目
本系列打算全面介绍jenkins的常规使用,这是第二篇,之前的文章在: jenkins实战(一):war安装及插件安装 一.新建项目 1.新建项目 此处我们打算新建自由风格项目,见下图. 值得注意的是 ...
- TensorFlow Jupyter Notebook 和matplotlib安装配置
Jupyter Notebook 和matplotlib Jupyter Notebook安装 Python 3 : python3 -m pip install --upgrade pip pyth ...
- Nginx安装及配置免费HTTPS证书
第一步:安装Nginx 安装Nginx 第二步:安装HTTPS证书( Let's Encrypt) 安装HTTPS证书 第三步骤:浏览器验证 Chrome浏览器打开开发者工具->Security ...
- cuteftp9破解及安装、使用
一.破解: 参考:https://jingyan.baidu.com/article/ca00d56c4e43b2e99febcf70.html 1. 首先下载cuteftp替换文件及cuteftp9 ...
- org.apache.jasper.JasperException:Unable to read TLD "META-INF/c-1_0-rt.tld" from JAR file jstl-1.2.jar
前两天把项目从eclipse EE版搬到MyEclipse中了.配置好jdk,确定build path中没有报错后,在tomcat中运行.结果,报错: org.apache.jasper.Jasper ...
- 品尝阿里云容器服务:5个2核4G节点使用情况记载
使用5台2核4G非IO优化的ECS作为节点创建集群,节点操作系统是Ubuntu 16.04.2 LTS.创建后3个为mananger节点,2个为worker节点,每个节点默认会运行7个容器,其中3个s ...
- 学习 rostopic
rostopic pub可以把数据发布到当前某个正在广播的话题上. rostopic pub [topic] [msg_type] [args] 示例 $ rostopic pub - /turtle ...
- angular4 辅助路由
1.辅助路由 2. 创建chat组件 ng g component chat 3. 组件html css: 1 2 3 4 5 6 7 .chat{ background:green; hei ...
- Eisenstein's criterion
https://en.wikipedia.org/wiki/Eisenstein%27s_criterion In mathematics, Eisenstein's criterion gives ...