World Finals 1996 Uva 247 (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[][],vis[];
void dfs(int u)
{
vis[u] = ;
for(int i = ;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 = ;
while(~scanf("%d%d",&n,&m))
{
if(n+m == ) break; ma.clear();
mb.clear();
memset(maps,,sizeof(maps));
tot = ;
for(int i = ;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] = ;
}
for(int k = ;k <= n;k++)
{
for(int i = ;i <= n;i++)
{
for(int j = ;j <= n;j++)
{
maps[i][j] = maps[i][j] || (maps[i][k]&&maps[k][j]);
}
}
}
memset(vis,,sizeof(vis));
if(!ca) puts("");
printf("Calling circles for data set %d:\n",++ca);
for(int i = ;i <= n;i++)
{
if(!vis[i])
{
cout<<mb[i];
dfs(i);
cout<<endl;
}
}
}
}
World Finals 1996 Uva 247 (Floyd求闭包)的更多相关文章
- Calling Circles(UVa 247)(Floyd 算法)
用Floyd算法求出传递闭包,然后用dfs求出每条连通分量.注意其中用到的几个小技巧: #include<cstdio> #include<iostream> #include ...
- POJ3275:Ranking the Cows(Bitset加速floyd求闭包传递)
Each of Farmer John's N cows (1 ≤ N ≤ 1,000) produces milk at a different positive rate, and FJ woul ...
- UVa 247 - Calling Circles(Floyd求有向图的传递闭包)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA - 247 Calling Circles(Floyd求传递闭包)
题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...
- UVA 247"Calling Circles"(floyd求传递闭包+SCC)
传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...
- UVa 247 电话圈(Floyd传递闭包)
https://vjudge.net/problem/UVA-247 题意: 如果两个人相互打电话,则说他们在同一个电话圈里.例如,a打给b,b打给c,c打给d,d打给a,则这4个人在同一个圈里:如果 ...
- UVA 247 - Calling Circles (Floyd)
互相可以打电话是一个传递关系,所以Floyd求传递封包,dfs找一个尽量大的圈. #include<bits/stdc++.h> using namespace std; ; map< ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- POJ 3660 Cow Contest(Floyd求传递闭包(可达矩阵))
Cow Contest Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16341 Accepted: 9146 Desc ...
随机推荐
- poj 3524 Charm Bracelet(01背包)
Description Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd ...
- 创建透明CEdit控件
1.在资源编辑器中将Edit控件的Border设为none(当然也可以在代码中修改窗口样式) 2.在重载CEdit的类中响应MSG_OCM_CTLCOLOREDIT消息,在处理函数中将背景模式设为透明 ...
- sysadmin_basement
基本部分 1. 系统硬件 1.1. 主板 获取序列号 $ sudo dmidecode -t system |grep -i Serial Serial Number: CNU9032T3N 获取厂商 ...
- JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
参考资料: 慕课网 DOM事件探秘 js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...
- Vim 配置Markdown
通过vundle工具安装以下插件: vim-markdown 语法高亮 vim-markdown-preview.vim 通过浏览器实时预览(支持同步滚动) -/.vimrc vundle部分添 ...
- C语言_愤怒的小鸟
// ConsoleApplication4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> ...
- python 字典排序,列表排序详细
在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按“键”排序和按“值”排序. 1.按“值 ...
- mysql 数据表
CREATE DATABASE IF NOT EXISTS `shop`;USE `shop`; drop table if exists lidepeng; create table lidepe ...
- centos装openoffice
一.安装openOffice1.使用tar -xzvf OOo_3.2.0_LinuxIntel_install_wJRE_en-US.tar.gz解压缩后,会得到OOO320_m12_native_ ...
- Django:之Sitemap站点地图、通用视图和上下文渲染器
Django中自带了sitemap框架,用来生成xml文件 Django sitemap演示: sitemap很重要,可以用来通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录. 开启si ...