河边的石头 ( 长沙理工大学第十一届程序设计竞赛)(DFS)

来源:互联网 发布:有高跟鞋也有跑鞋 知乎 编辑:程序博客网 时间:2024/04/28 14:13

Home PageDIY ContestsProblemsRanklistStatusStatistics

河边的石头

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other)
Total Submission(s) : 5   Accepted Submission(s) : 3

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

ElemenT陪小红在小河边上玩,他发现了河里有许许多多的石头,每一个石头都有一定的重量且有自己的编号,石头的重量两两不相等。
ElemenT随机抽取两个石头,假设编号是A和B,他会记录A比B重还是B比A重,然后将A和B再放回河里。
ElemenT这样操作了M次之后,小红觉得ElemenT太无聊了,当他又一次从河里捞出两个石头的石头,
小红突然问他:从你之前记录的石头重量的比较结果 能不能直接推断出当前两个石头的重量谁大谁小?
ElemenT想让你帮帮他,从已有的记录能不能推断当前的关系。

Input

多组数据,对于每组数据:首先输入一个正整数N表示石头的数量,(编号为1-N)
接着输入一个M,代表ElemenT已经进行了M次比较并记录了结果,接下来M行,
每行两个正整数,中间用空格隔开,表示第一个石头的编号和第二个石头的编号,且第一个石头比第二个石头重。
最后输入两个正整数代表 最后两个ElemenT拿出的石头的编号。
N, M < 100, 所有的编号均为正整数,且不会出现矛盾的情况。

Output

对于每一组数据,如果第一个石头重,则输出"first",如果第二个重,则输出"second",如果无法得出结论,则输出"unknow"。

Sample Input

4 41 22 41 34 32 3

Sample Output

first

Statistic | Submit | Back

本来想用拓扑排序的 后来一想 算了 深搜一下把。。。。

使用vecotr存贮边  因为是判断 a b 哪个更重    我们不知道哪个更重  所以两次深搜 分别为dfs(a,b),dfs(b,a)

#include <stdio.h>#include <vector>#include <string.h>using namespace std;vector<int>map[105];int result;bool vis[105][105];bool dfs(int x,int y){//    printf("%d ",x);    if(x==y)    return true;    for(int i=0;i<map[x].size();i++)    {        if(!vis[x][map[x][i]])        {            vis[x][map[x][i]]=true;            if(dfs(map[x][i],y))            return true;        }    }    return false;}int main(){    int n,m;    while(~scanf("%d %d",&n,&m))    {        int a,b;        memset(map,0,sizeof(map));        while(m--)        {            scanf("%d %d",&a,&b);             map[a].push_back(b);        }        scanf("%d %d",&a,&b);        if(a==b)        {            puts("unknow");            continue;        }        result=0;        memset(vis,false,sizeof(vis));        if(dfs(a,b))        result=1;        if(!result)        {            memset(vis,false,sizeof(vis));            if(dfs(b,a))            result=2;        }        if(result==1)        puts("first");        else if(result==2)        puts("second");        else        puts("unknow");    }    return 0;}



0 0
原创粉丝点击