http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2723

题意:给出一些字符串u,v,代表u->v,问有几条边是多余的,也就是说去掉那些边后,u仍能到达v。

思路:穷举每条边,试着去掉该边,bfs搜索两个点是否仍然可达。

 #include<stdio.h>
#include<iostream>
#include<string.h>
#include<map>
#include<queue>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
char s1[],s2[],s[][];
map<string,int>f;
vector<int>graph[];
int Map[][],vis[];
int n;
int cnt;
struct node
{
char s1[];
char s2[];
}edge[],tmp[];
int cmp(const node a, const node b)
{
if(strcmp(a.s1,b.s1) == )
return strcmp(a.s2,b.s2)<;
return strcmp(a.s1,b.s1)<;
}
bool bfs(int s, int t)
{
queue<int> que;
while(!que.empty())
que.pop();
vis[s] = ;
que.push(s);
while(!que.empty())
{
int u = que.front();
que.pop();
if(u == t)
return true;
for(int i = ; i < (int)graph[u].size(); i++)
{
int v = graph[u][i];
if(!vis[v] && Map[u][v])
{
que.push(v);
vis[v] = ;
}
}
}
return false;
} int main()
{
int item = ;
while(cin >> n)
{
if(n == ) break;
for(int i = ; i <= ; i++)
graph[i].clear();
f.clear();
memset(Map,,sizeof(Map));
cnt = ;
for(int i = ; i < n; i++)
{
cin>>s1>>s2;
if(!f[s1])
{
f[s1] = ++cnt;
strcpy(s[cnt],s1);
}
if(!f[s2])
{
f[s2] = ++cnt;
strcpy(s[cnt],s2);
}
graph[ f[s1] ].push_back( f[s2] );
Map[ f[s1] ][ f[s2] ] = ;
} int res = ;
for(int i = ; i <= cnt; i++)
{
for(int j = ; j < (int)graph[i].size(); j++)
{
int v = graph[i][j];
memset(vis,,sizeof(vis));
Map[i][v] = ;
if(bfs(i,v))
{
strcpy(edge[res].s1,s[i]);
strcpy(edge[res].s2,s[v]);
res++;
}
else Map[i][v] = ;
}
}
sort(edge,edge+res,cmp);
printf("Case %d: ",item++);
int t = ;
if(res)
tmp[t++] = edge[];
for(int i = ; i < res; i++)
{
if(strcmp(edge[i].s1,edge[i-].s1) == && strcmp(edge[i].s2,edge[i-].s2) == )
continue;
else
{
tmp[t++] = edge[i];
}
}
printf("%d",t);
for(int i = ; i < t; i++)
{
printf(" %s,%s",tmp[i].s1,tmp[i].s2);
}
printf("\n"); }
return ;
}

Super Phyllis(穷举+搜索)的更多相关文章

  1. 实践和感悟 - scala向下转型和减少穷举

    工作中的问题总结: 问题一:scala 之向下转型 引言:假如在复杂的业务逻辑中,变量的类型不能确认,只能给个接口类型,这样数据类型推导不会错误,但是后面要使用实现类的类型时,你却发现转不过来了? 对 ...

  2. 穷举算法和递推算法(Java)

    穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...

  3. 基本算法思想之穷举法(C++语言描述)

    穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的.穷举算法效率不高,但是适应于一些没有规律可循的场 ...

  4. [C++11][算法][穷举]输出背包问题的所有可满足解

    关于背包问题的题目,前人之述备矣,这里只讨论实现 输入: n ca w_1 v_1 w_2 v_2 ... w_n v_n 其中,n是物品总数,ca是背包大小,w_n是第n个物品的重量,v_n是第n个 ...

  5. C#穷举

    穷举:  穷举法的基本思想是根据题目的部分条件确定答案的大致范围, 并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后都 ...

  6. C#语句2——循环语句(for穷举、迭代和while循环)

    一.for循环拥有两类: (一).穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元. ...

  7. 穷举、迭代、以及while代替for循环的使用

    for循环的穷举: 就是所有情况走一遍,使用if筛选出符合的情况. while循环分为2个格式 (1)先判断再做while(){}(2)不管对错,先做了在判断do{}whlie() 百鸡百钱的whil ...

  8. 2016年10月10日--穷举、迭代、while循环

    穷举 将所有可能性全部全部走一遍,使用IF筛选出满足的情况 练习: 1.单位给发了一张150元购物卡, 拿着到超市买三类洗化用品. 洗发水15元,香皂2元,牙刷5元. 求刚好花完150元,有多少种买法 ...

  9. while do while以及穷举和迭代

    今天的新内容1:while循环 格式: while() { } 初始状态要在循环外提前规定 状态改变要写在花括号里面 括号内是循环条件 for循环与while循环的对比: 2:do while 不管循 ...

随机推荐

  1. 20160416--javaweb之国际化

    一:国际化1.国际化的概念:一款软件希望不同的国家和地区的使用者都可以使用,这个时候软件中的一些内容和数据需要根据用户地区信息不同而展示成不同的样子. 2.国际化的组成部分: (1)页面中固定文本元素 ...

  2. ionic(一) build你的第一个android apk

    1.ionic start myApp tabs    >>创建一个app 2.cd myApp  >>进入myApp文件 3.ionic platform add andro ...

  3. ArcGIS Runtime SDK for WPF已不更新,后续将被ArcGIS Runtime SDK for .NET取代

    ArcGIS Runtime SDK 10.2.5 for WPF is now available! by mbranscomb and Rex Hansen on January 27, 2015 ...

  4. Android开发环境搭建(2015年8月更新)

    1.  下载和安装Android SDK Android的官方站点是http://www.android.com: 登录https://developer.android.com/intl/zh-cn ...

  5. oracle 11g不能连接报ORA-12537+ora-609解决

    操作系统: windows2008 数据库:oracle11g 问题发生:一套正常跑了一年的应用系统,忽然无法连接上数据库,但是另外一个应用可以正常链接,数据入库正常. 数据库服务器端查看: 使用 l ...

  6. Jquery VailDate初探

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. UIImagePickerController显示中文界面

    iOS开发中,我们经常遇到获取拍照.相册中图片的功能,就必然少不了UIImagePickerController,但是我们发现当我们使用它的时候,它的页面是英文的,看着很别扭,国人还是比较喜欢看中文界 ...

  8. 04_XML_03_XMLDTD约束与校验

    [什么是XML约束] 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束. 常见的XML约束技术有:XML DTD和XML Schema DTD(Document Typ ...

  9. iOS面试题6.30总结

    越来越多的人投入iOS这个行业中,但是作为刚才学校毕业的学生,我们没有任何经验.或者经验很少.但是这也不能阻挡我们对苹果的热情,想投入iOS的开发中.而作为进入企业的第一步,我们要参加面试.面试中我们 ...

  10. 获取本机IP、mac地址、计算机名

    python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...