hdoj 3849 By Recognizing These Guys, We Find Social Networks Useful【双连通分量求桥&&输出桥&&字符串处理】
By Recognizing These Guys, We Find Social Networks Useful
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)
Total Submission(s): 2885 Accepted Submission(s):
726
us know about those guys who we are following intensely and makes us keep up our
pace with the trend of modern times.
But how?
By what method can we know
the infomation we wanna?In some websites,maybe Renren,based on social network,we
mostly get the infomation by some relations with those "popular leaders".It
seems that they know every lately news and are always online.They are alway
publishing breaking news and by our relations with them we are informed of
"almost everything".
(Aha,"almost everything",what an impulsive
society!)
Now,it's time to know what our problem is.We want to know which are
the key relations make us related with other ones in the social
network.
Well,what is the so-called key relation?
It means if the relation
is cancelled or does not exist anymore,we will permanently lose the relations
with some guys in the social network.Apparently,we don't wanna lose relations
with those guys.We must know which are these key relations so that we can
maintain these relations better.
We will give you a relation description map
and you should find the key relations in it.
We all know that the relation
bewteen two guys is mutual,because this relation description map doesn't
describe the relations in twitter or google+.For example,in the situation of
this problem,if I know you,you know me,too.
In the
first line,an integer t,represents the number of cases(t <= 5).
In the
second line,an integer n,represents the number of guys(1 <= n <= 10000)
and an integer m,represents the number of relations between those guys(0 <= m
<= 100000).
From the second to the (m + 1)the line,in each line,there are
two strings A and B(1 <= length[a],length[b] <= 15,assuming that only
lowercase letters exist).
We guanrantee that in the relation description
map,no one has relations with himself(herself),and there won't be identical
relations(namely,if "aaa bbb" has already exists in one line,in the following
lines,there won't be any more "aaa bbb" or "bbb aaa").
We won't guarantee
that all these guys have relations with each other(no matter directly or
indirectly),so of course,maybe there are no key relations in the relation
description map.
number of key relations in the relation description map.
From the second line
to the (n + 1)th line,output these key relations according to the order and
format of the input.
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define MAX 100100
#define INF 0x7fffff
using namespace std;
int n,m;
int head[MAX],ans;
int dfn[MAX],low[MAX];
int dfsclock;
char str1[50],str2[50];
char p[MAX][20];
int num,mark;
char ant[MAX][20],ano[MAX][20];
struct node
{
int beg,end,next;
}edge[MAX];
void init()
{
ans=num=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v)
{
node E={u,v,head[u]};
edge[ans]=E;
head[u]=ans++;
}
void getmap()
{
int i,j,a,b;
int sum=1;
for(i=1;i<=m;i++)
{
scanf("%s%s",str1,str2);
int x,y;
x=y=INF;
a=b=0;
for(j=1;j<sum;j++)
{
if(strcmp(str1,p[j])==0)
{
x=j;
a=j;
}
if(strcmp(str2,p[j])==0)
{
y=j;
b=j;
}
if(x!=INF&&y!=INF)
break;
}
if(x==INF)
{
x=sum++;
a=x;
strcpy(p[x],str1);
}
if(y==INF)
{
y=sum++;
b=y;
strcpy(p[y],str2);
}
add(a,b);
add(b,a);
}
}
void tarjan(int u,int fa)
{
int i,v;
low[u]=dfn[u]=++dfsclock;
for(i=head[u];i!=-1;i=edge[i].next)
{
v=edge[i].end;
if(v==fa)
continue;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
if(dfn[u]<low[v])
{
strcpy(ant[num],p[edge[i].beg]);
strcpy(ano[num++],p[edge[i].end]);
}
}
else
low[u]=min(low[u],dfn[v]);
}
}
void find()
{
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
dfsclock=0;
tarjan(1,-1);
mark=0;
for(i=1;i<=n;i++)
{
if(!dfn[i])
{
mark=1;
break;
}
}
}
void solve()
{
int i,j;
if(mark)
{
printf("0\n");
return ;
}
printf("%d\n",num);
for(i=0;i<num;i++)
{
printf("%s %s\n",ant[i],ano[i]);
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
init();
getmap();
find();
solve();
}
return 0;
}
后来看别人都是用的map处理 我不会用map 苦逼啊
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<stack>
#include<map>
#define MAX 200010
#define INF 0x7fffff
using namespace std;
int n,m;
int head[MAX],ans;
int dfn[MAX],low[MAX];
int dfsclock;
char str1[50],str2[50];
map<string, int>q1;
map<int, string>q2;
int num,mark,bridge;
struct node
{
int beg,end,cnt,next;
}edge[MAX];
void init()
{
ans=num=bridge=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v)
{
node E={u,v,0,head[u]};
edge[ans]=E;
head[u]=ans++;
}
void getmap()
{
int i,j,a,b;
int sum=1;
q1.clear();
q2.clear();
for(i=1;i<=m;i++)
{
scanf("%s%s",str1,str2);
if(q1[str1]==0)//貌似是因为map中都是一对一的情况,即同一个字符串不可能重复出现
{
q1[str1]=sum;
q2[sum]=str1;
sum++;
}
if(q1[str2]==0)
{
q1[str2]=sum;
q2[sum]=str2;
sum++;
}
add(q1[str1],q1[str2]);
add(q1[str2],q1[str1]);
}
}
void tarjan(int u,int fa)
{
int i,v;
low[u]=dfn[u]=++dfsclock;
for(i=head[u];i!=-1;i=edge[i].next)
{
v=edge[i].end;
if(v==fa)
continue;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
if(dfn[u]<low[v])
{
edge[i].cnt=edge[i^1].cnt=1;
bridge++;
}
}
else
low[u]=min(low[u],dfn[v]);
}
}
void find()
{
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
dfsclock=0;
tarjan(1,-1);
mark=1;
for(int i=1;i<=n;i++)
{
if(!dfn[i])
{
mark=0;
return ;
}
}
}
void solve()
{
int i,j;
if(mark==0)
printf("0\n");
else
{
printf("%d\n",bridge);
for(i=0;i<ans;i=i+2)
{
if(edge[i].cnt==1)
printf("%s %s\n",q2[edge[i].beg].c_str(),q2[edge[i].end].c_str());
} //我查了map的常用函数,但是没找到这个.c_str .......
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
init();
getmap();
find();
solve();
}
return 0;
}
hdoj 3849 By Recognizing These Guys, We Find Social Networks Useful【双连通分量求桥&&输出桥&&字符串处理】的更多相关文章
- HDU 3849 By Recognizing These Guys, We Find Social Networks Useful(双连通)
HDU 3849 By Recognizing These Guys, We Find Social Networks Useful pid=3849" target="_blan ...
- HDU 3849 By Recognizing These Guys, We Find Social Networks Useful
By Recognizing These Guys, We Find Social Networks Useful Time Limit: 1000ms Memory Limit: 65536KB T ...
- hdu3849-By Recognizing These Guys, We Find Social Networks Useful:双连通分量
By Recognizing These Guys, We Find Social Networks Useful Time Limit: 2000/1000 MS (Java/Others) ...
- HDU3849-By Recognizing These Guys, We Find Social Networks Useful(无向图的桥)
By Recognizing These Guys, We Find Social Networks Useful Time Limit: 2000/1000 MS (Java/Others) ...
- hdoj 4612 Warm up【双连通分量求桥&&缩点建新图求树的直径】
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Su ...
- hdoj 4738 Caocao's Bridges【双连通分量求桥】
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3849 (双联通求桥)
一道简单的双联通求桥的题目,,数据时字符串,,map用的不熟练啊,,,,,,,,,,,,, #include <iostream> #include <cstring> #in ...
- hdoj 3336 Count the string【kmp算法求前缀在原字符串中出现总次数】
Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdoj 2222 Keywords Search 【AC自己主动机 入门题】 【求目标串中出现了几个模式串】
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
随机推荐
- 【软件分享】文本对比工具 Beyond Compare
转载自公众号:EmbeddDeveloper 对嵌入式感兴趣可以关注原作者博客: http://blog.csdn.net/ybhuangfugui 此处转载为分享用 Ⅰ.摘要 Beyond Comp ...
- js去除重复数值
var c=[2,4,3,5,2,2,2], a = {}, i = 0; for(;i<c.length;i++){ a[c[i]] = 1 //利用对象名称不能重复的特性来去重 } c=[] ...
- Javascript事件绑定的几种方式
Javascript的事件绑定主要有四种方法(一下在IE中运行正常,但不保证其他浏览器): [注:onXXX为某一事件,fun为某一function,domId为某一DOM对象id,event类型见后 ...
- Google考虑抛弃Cookies机制
根据华尔街日报的报道,Google 正在考虑抛弃古老的浏览器 cookies 来追踪用户信息的机制.作为替代,Google 将开发一种「个人匿名标识机制」.Google 早前已经计划在 IE 和 iP ...
- SPRING IN ACTION 第4版笔记-第五章Building Spring web applications-001-SpringMVC介绍
一. 二.用Java文件配置web application 1. package spittr.config; import org.springframework.web.servlet.suppo ...
- 135. Candy
题目: There are N children standing in a line. Each child is assigned a rating value. You are giving c ...
- Android layout_gravity失效的问题
相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过.简单使用一下搜索工具,我们就不难找到下面这样的答案: layout_gravity 表示组件自身在父组件中的位 ...
- javascript模板引擎Mustache
Mustache(英文本意:触须,胡须)是基于JavaScript实现的模版引擎,类似于JQuery Template,但是这个模版更加的轻量级,语法更加的简单易用,很容易上手. 下载:https:/ ...
- Hadoop2.2编程:新旧API的区别
Hadoop最新版本的MapReduce Release 0.20.0的API包括了一个全新的Mapreduce JAVA API,有时候也称为上下文对象. 新的API类型上不兼容以前的API,所以, ...
- Wordpress Jigoshop插件路径泄露漏洞
漏洞名称: Wordpress Jigoshop插件路径泄露漏洞 CNNVD编号: CNNVD-201311-109 发布时间: 2013-11-12 更新时间: 2013-11-12 危害等级: ...