World Finals 1996 Uva (Floyd求闭包)

Posted icode-xiaohu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了World Finals 1996 Uva (Floyd求闭包)相关的知识,希望对你有一定的参考价值。

  思路:用Floyd求传递闭包。

  附:逗号后的空格没看到,WA了好多次……。还有就是强连通分量也可以做,但是对这个题来说太麻烦,而且不方便输出,。

  代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
using namespace std;
int n,m;
map<string,int> ma;
map<int,string> mb;
int maps[50][50],vis[50];
void dfs(int u)
{
    vis[u] = 1;
    for(int i = 1;i <= n;i++)
    {
        if(!vis[i] && maps[u][i] && maps[i][u])
        {
            cout<<", "<<mb[i];
            dfs(i);
        }
    }
    return ;
}
int main()
{
    string a,b;
    int tot,u,v,ca = 0 ;
    while(~scanf("%d%d",&n,&m))
    {
        if(n+m == 0) break;

        ma.clear();
        mb.clear();
        memset(maps,0,sizeof(maps));
        tot = 1;
        for(int i = 1;i <= m;i++)
        {
            cin>>a>>b;
            if(!ma[a]) ma[a] = tot++;
            if(!ma[b]) ma[b] = tot++;
            u = ma[a]; v = ma[b];
            mb[u] = a; mb[v] = b;
            maps[u][v] = 1;
        }
        for(int k = 1;k <= n;k++)
        {
            for(int i = 1;i <= n;i++)
            {
                for(int j = 1;j <= n;j++)
                {
                    maps[i][j] = maps[i][j] || (maps[i][k]&&maps[k][j]);
                }
            }
        }
        memset(vis,0,sizeof(vis));
        if(!ca) puts("");
        printf("Calling circles for data set %d:\n",++ca);
        for(int i = 1;i <= n;i++)
        {
            if(!vis[i])
            {
                cout<<mb[i];
                dfs(i);
                cout<<endl;
            }
        }
    }
}

 

以上是关于World Finals 1996 Uva (Floyd求闭包)的主要内容,如果未能解决你的问题,请参考以下文章

[UVa 213]Message Decoding,ACM/ICPC World Finals 1991 信息解码

[算法竞赛入门经典] Crossword Answers ACM/ICPC World Finals 1994,UVa232

[算法竞赛入门经典]Message Decoding,ACM/ICPC World Finals 1991,UVa213

[算法竞赛入门经典]Repeating Decimals, ACM/ICPC World Finals 1990,UVa202

习题6-8 空间结构(Spatial Structures, ACM/ICPC World Finals 1998, UVa806)

习题6-8 空间结构(Spatial Structures, ACM/ICPC World Finals 1998, UVa806)