UVA11927

来源:互联网 发布:重庆行知小小学校招聘 编辑:程序博客网 时间:2024/05/21 03:18

Num是奇数才当作1个石头

理解一下sg函数

函数中,在想那个vis的初始化是否含有一点回溯的意思,显然我想多了= =

sg在图论中的一种简单应用= =

#include <stdio.h>#include <string.h>#include <algorithm>#include <vector>using namespace std;const int N = 1005;int n, m, sg[N];vector<int> g[N];int dfs(int u){    if(sg[u]!=-1)return sg[u];    if(!g[u].size())return sg[u]=0;    bool vis[N];    memset(vis,false,sizeof(vis));    for(int i=0;i<g[u].size();i++){        vis[dfs(g[u][i])]=true;    }    for(int i=0;;i++){        if(!vis[i])return sg[u]=i;    }}int main(){    while(scanf("%d%d",&n,&m))    {        if(!n&&!m)return 0;        memset(sg,-1,sizeof(sg));        for(int i=0;i<n;i++)g[i].clear();        for(int i=0;i<m;i++){            int a,b;            scanf("%d%d",&a,&b);            g[a].push_back(b);        }        int ans=0;        for(int i=0;i<n;i++){            dfs(i);        }        for(int i=0;i<n;i++){            int num;            scanf("%d",&num);            if(num&1)ans^=sg[i];        }        printf("%s\n",ans==0?"Second":"First");    }    return 0;}

0 0
原创粉丝点击