Super Phyllis(穷举+搜索)
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(穷举+搜索)的更多相关文章
- 实践和感悟 - scala向下转型和减少穷举
工作中的问题总结: 问题一:scala 之向下转型 引言:假如在复杂的业务逻辑中,变量的类型不能确认,只能给个接口类型,这样数据类型推导不会错误,但是后面要使用实现类的类型时,你却发现转不过来了? 对 ...
- 穷举算法和递推算法(Java)
穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...
- 基本算法思想之穷举法(C++语言描述)
穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的.穷举算法效率不高,但是适应于一些没有规律可循的场 ...
- [C++11][算法][穷举]输出背包问题的所有可满足解
关于背包问题的题目,前人之述备矣,这里只讨论实现 输入: n ca w_1 v_1 w_2 v_2 ... w_n v_n 其中,n是物品总数,ca是背包大小,w_n是第n个物品的重量,v_n是第n个 ...
- C#穷举
穷举: 穷举法的基本思想是根据题目的部分条件确定答案的大致范围, 并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后都 ...
- C#语句2——循环语句(for穷举、迭代和while循环)
一.for循环拥有两类: (一).穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元. ...
- 穷举、迭代、以及while代替for循环的使用
for循环的穷举: 就是所有情况走一遍,使用if筛选出符合的情况. while循环分为2个格式 (1)先判断再做while(){}(2)不管对错,先做了在判断do{}whlie() 百鸡百钱的whil ...
- 2016年10月10日--穷举、迭代、while循环
穷举 将所有可能性全部全部走一遍,使用IF筛选出满足的情况 练习: 1.单位给发了一张150元购物卡, 拿着到超市买三类洗化用品. 洗发水15元,香皂2元,牙刷5元. 求刚好花完150元,有多少种买法 ...
- while do while以及穷举和迭代
今天的新内容1:while循环 格式: while() { } 初始状态要在循环外提前规定 状态改变要写在花括号里面 括号内是循环条件 for循环与while循环的对比: 2:do while 不管循 ...
随机推荐
- android中使用Intent在activity之间传递数据
android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...
- Tomcat中JSP引擎工作原理
http://blog.csdn.net/linjiaxingqqqq/article/details/7164449 JSP运行环境: 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有W ...
- PeekMessage
PeekMessage是一个Windows API函数.该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构. 1 语法 BOOL PeekMessage( LPMSG IpMsg, ...
- 使用Eclipse提供的Axis1.x生成WSDL文件以及Server和Client代码
使用Eclipse自带的Axis 1.x来创建一个web service应用的服务端和客户端 Axis 是SOAP WebService协议实现,SOAP实质上是一个基于HTTP POST的请求,以X ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
- docker私有仓库
1.docker pull registry 2.sudo docker run -d -p 5000:5000 registry 默认情况下,会将仓库存放于容器内的/tmp/registry目录下, ...
- jquery 去掉重复项(splice,apply,push)
/* js数组去掉重复项 var somearray = [1,1,2,2,3,3,4,4,'1']; somearray.check(); //somearray will return arr=[ ...
- (jQuery 插件)封装容器的表单为json对象
下面代码可以把一个页面容器中的表单元素封装成一个json对象. (function($){ $.fn.serializeObject=function(){ var inputs=$(this).fi ...
- SQL Join(连接查询)
1.连接查询分为: inner join(自然连接,自连接) Left join(左连接)/Left outer join(左外连接):效果一样 Right join(右连接)/Right outer ...
- AAABBBBCCCC
语单词词性简写语的意义:,n. 名词 ,noun的缩写v. 动词 , verb的缩写pron. 代词 , pronoun的缩写adj. 形容词, adjective的缩写adv. 副词, adverb ...