UVA10305&&2018ICPC北京赛A题

UVA10305

UVA10305&&2018ICPC北京赛A题_第1张图片

#include
#include
#include
using namespace std;
const int N = 110;
int vis[N];
int ans[N];
int G[N][N];
int n,m,t;
bool  dfs(int u)
{
    vis[u] = -1;
    for(int v=1;v<=n;++v)
        if(G[u][v])
        {
            if(vis[v]<0) return false;  //如果v正在被访问(说明有环)
            else if(!vis[v]&&!dfs(v)) return false;  //v没被访问过就去访问v
        }
    vis[u]=1;
    ans[--t]=u;
    //cout<

题目链接:http://hihocoder.com/contest/icpcbeijing2018/problem/1

思路:拓扑排序判环

map把string换成数字方便建图

map方便输出人名

#include
#include
#include
using namespace std;
map mp;
map mm;
int n;
int cnt;
int G[50][50];
int vis[50];
bool dfs(int u)
{
    vis[u]=-1;
    for(int v=1;v<=cnt;++v)
    {
        if(G[u][v]==1)
        {
            if(vis[v]==-1)
            {
                cout<>n)
    {
        cnt=0;
        memset(G,-1,sizeof(G));
        mp.clear();
        mm.clear();
        while(n--)
        {
            string a,b;
            cin>>a>>b;
            if(mp[a]==0) mp[a]=++cnt,mm[cnt]=a;
            if(mp[b]==0) mp[b]=++cnt,mm[cnt]=b;
            G[mp[a]][mp[b]]=1;
        }
        if(topo_sort()) cout<<0<

 

你可能感兴趣的:(拓扑排序)