POJ 2425

来源:互联网 发布:男士护肤面膜 知乎 编辑:程序博客网 时间:2024/06/05 11:11

想顺便练练邻接矩阵


#include <iostream>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


using namespace std;
int SG[1111<<1];
int N;


typedef struct Arcnode//头结点
{
    int num;
    Arcnode *next;
}Arcnode;
Arcnode gra[1111];


int dfs( int u)
{


    if(SG[u] != -1)
      return SG[u];
    int vis[1111] = {0};
    Arcnode *now = gra[u].next;


    while(now)
    {
        vis[dfs(now->num)]++;
        now = now->next;
    }
    for( int i = 0; i < N; i++)
     if(!vis[i])
      return SG[u] = i;
}
int main()
{
    while(scanf("%d",&N) != EOF && N)
    {
        int m, v;
        for( int i = 0; i < N; i++)
          SG[i] = -1;
        for(int i = 0; i < N; i++)
        {
            scanf("%d",&m);
            gra[i].num = i;
            gra[i].next = NULL;
            Arcnode * p = gra[i].next;


            for( int j = 0; j < m; j++ )
            {
                scanf("%d",&v);
                Arcnode* q = (Arcnode*) malloc (sizeof(Arcnode));
                q->num = v;
                q->next = p;
                p = q;
                gra[i].next = q;
            }
        }
        int  que;


        while(scanf("%d",&que) != EOF && que)
        {
            int temp = 0, a;
            for( int i = 0; i < que; i++)
             {
                 scanf("%d", &a);
                 temp ^= dfs(a);
             }
             if(temp)
              printf("WIN\n");
            else
             printf("LOSE\n");
        }
    }
}
0 0