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. SQL Server 脚本语句

    一.语法结构 select select_list [ into new_table ] from table_source [ where search_condition ] [ group by ...

  2. 学习笔记_Java_day12_设计模式MVC(13).JavaWeb的三层框架(14)

    MVC 1. 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Contr ...

  3. C++ socket开发1

    服务端 setlocale(LC_ALL,"Chinese-simplified"); WORD wVersionRequested; WSADATA wsaData; int e ...

  4. iOS-开发日志-UITextView介绍

    UITextView 属性 1.     text: 设置textView中文本 _textView.text = @"Now is the time for all good develo ...

  5. 使windows server 2003 开机不显示登录页面

    1.运行“regedit”,以打开“注册表管理器”:运行注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersi ...

  6. 一段sql的优化

    优化前代码 select * ,ROW_NUMBER() OVER(order by WrongCount desc) as rowId from(select Quba_IDint,Quba_Num ...

  7. AOP学习过程中遇到的问题汇总

    jdk版本问题:     在spring较低的版本中,仅支持jdk1.5到1.7版本,由于我本机安装的是jdk1.8,所以在调试的时候就会提示jdk版本要高于1.5.于是换成spring4.0,在co ...

  8. ubuntu上 安装 基于sphinx 的 coreseek 全文搜索

    原生sphinx不支持中文, sphinx-for-chinese匹配中文时也不返回结果 ,真纠结,  最好试了 coreseek,这个能正确返回结果了, 所以记录一下 1 http://www.co ...

  9. Vim粘贴代码时缩进混乱

    Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...

  10. c#反射机制判断同一个类的两个实例的值是否完全一样

    ; i < properties1.Length; i++)            {                string s = properties1[i].DeclaringTyp ...