标题:求此题解(还是测试数据有问题- -)
只看楼主
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
已结贴  问题点数:88 回复次数:11 
求此题解(还是测试数据有问题- -)
时间限制 : 1000 ms    内存限制 : 32 MB
题目描述

有一天boss给小明发了一套游戏规则,声称这是小明接下来任务。十来页的规则文档看得头有点晕,
并且小明对规则的可行性表示了怀疑,因为文档充斥了X条件的产生要依赖于Y产生。如果X依赖于或
者间接依赖于Y,而且Y依赖或者间接依赖于X那么规则就出问题了 或者是X可能依赖于错误的条件Y 那也是规则错误。
对此,小明想验证一下规则的可行性(不理解可以看见解释 再不理解 就无视这个题好了^-^)。
输入描述

最多有100 case
每个样例开始有1个N表示下面有N个不同的条件(0<N<=100),每行第一个数字X(0<=X<N)代表某一个条件,接着是
一个数字K,表示后面有K个X需要依然的条件。
输出描述

如果规则在逻辑上没有问题,则输出YES,否则错误集合的内的最小数字。

样例输入

2
0 0
1 1 0
2
0 1 1
1 1 0
8
0 1 6
1 0
2 1 4
3 2 2 1
4 1 3
5 0
6 1 0
7 2 5 6
4
0 1 3
1 1 3
2 1 1
3 1 2
4
0 0
1 1 3
2 1 1
3 2 0 2
样例输出

YES
0
0
2
0
1

解释:第三个样例0和6为相互依靠故为一个错误集合 2 3 4相互依靠也为一个错误集合 注意这里的1不依靠任何条件故不属于错误 输出就是0 2 第四个样例中 注意由于0的条件是3,而3在错误集合里 那么0也是错误的 也就是说原因是错误的 结论也就是错误的 但是如果结果是错误的,原因是不一定错误的 如第五组样例 1 2 3这个错误集合不影响到0这个条件 因为0这个条件的发生是没有前提的。
搜索更多相关主题的帖子: 可行性 游戏 时间 明发 
2011-04-08 20:59
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
我写的代码,顺便加了点注释, 大家帮忙看看是我的理解有问题呢?? 还是我的代码有问题呢?? 还是测试数据有问题呢??
这题目的OJ地址为: http://info.zjfc.

#include<iostream>
#include<queue>
using namespace std;

int map[109][109],count1[109],flag[109],n,min2,flag1;
#define MAX 109
void topological_sort(){
    queue<int> line;
    for(int i=0; i<MAX; ++i){
        if( count1[i]==0 ) line.push(i);
    }
    while(!line.empty()){
        int t=line.front();
        line.pop();
        for(int i=0; i<MAX; ++i){
            if(map[t][i]){
                map[t][i]=0;
                count1[i]--;
                if(count1[i]==0) line.push(i);
            }
        }
    }
}
void DFS( int x){
    for(int i=0; i<MAX; ++i){
        if( !flag[i] && (map[x][i] || map[i][x]) ){
            flag[i]=1;
            ++flag1;
            if(i<min2) min2=i;
            DFS(i);
        }
    }
}
int main(){
    while( cin >> n ){
        memset(map,0,sizeof(map));
        memset(count1,0,sizeof(count1));
        queue<int> line2;
        for(int i=0; i<n; ++i ){
            int m,k;
            cin >> m >> k;
            if(k==0) continue;
            for(int j=0; j<k; ++j){
                int a;
                cin >> a;
                map[a][m]=1;
                count1[m]++;
            }
        }
        topological_sort();//先进行拓扑排序,把依赖关系正确的点去掉
        memset(flag,0,sizeof(flag));
        for(int i=0; i<MAX; ++i){ //穷举每个点,看是否为错误集合
            if(!flag[i]){
                flag[i]=1;
                flag1=0; //标记是否是一个错误集合( 拓扑排序后 如果集合中的元素个数大于2, 那就说明一定是错误集合)
                min2=i;
                DFS(i);
               if(flag1) line2.push(min2);
            }
        }
        if(!line2.empty()){
            while(!line2.empty()){
                int t=line2.front();
                line2.pop();
                cout << t << endl;
            }
        }
        else cout << "YES" << endl;
    }
    return 0;
}
2011-04-08 21:00
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:15 
看了N久还没有明白程序要干什么的!

   唯实惟新 至诚致志
2011-04-08 21:10
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 3楼 qq1023569223
貌似 好像 可能是。。。。。。。。
2011-04-08 21:12
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:15 
还是很活跃啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-08 23:42
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:15 
看不懂。。。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-08 23:47
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:15 
这是一个非常基本的拓扑排序题。
易知矛盾存在且仅存在于强联通分量内。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2011-04-09 00:16
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
得分:15 
额,太晚了,不想看代码了,说下什么叫做拓扑排序咯

我的地盘
2011-04-09 00:24
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 7楼 卧龙孔明
就是一个基本的拓扑排序+DFS  我也是这么想的这么写的,自己想的案例也都过了,
所以怀疑可能是OJ数据错了(以前就遇到过这种情况在这OJ上),但我又不敢十分确定,
所以想发上来让大家帮我看看我的代码错了呢?? 还是我题目理解错了??还是测试数据有问题
如果有人去AC了 我就能确定我的代码一定错了
2011-04-09 12:13
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:15 
这就是个拓扑排序,你能把错误的数据发上来吗,分析一下

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-04-09 13:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-336006-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047210 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved