图的遍历 | 1034 map处理输入数据,连通块判断
这题写得比较痛苦。首先有点不在状态,其次题目比较难读懂。
“Gang”成立的两个条件:①成员数大于两个 ②边权总和大于阈值K
首先,在录数据的时候通过map或者字符串哈希建立string到int的映射。
然后,这个题的数据结构其实是带权无向图。在录数据的时候就要处理好点权和边权。
最后,对所有顶点做一遍dfs,汇总边权,找出最大点权和最大点权所在的点,把数据录进ans里。
注意的点一个是环路边权的汇总。方法是在dfs中通过先加边权再判断vis是否遍历过。此时又要注意用不搜前驱点的dfs结果,及dfs(p,s) //p是前驱点,s是当前点
还有一个是邻接数组要开大一点。虽然给出的图的边数是小于1000,但是顶点数不一定。
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 10000
#define MAX 0x06FFFFFF
#define V vector<int> using namespace std; string ID2name[LEN];
map<string,int> name2ID;
int g[LEN][LEN];
int nID=;
int w[LEN];
int vis[LEN];
int cnt;
int maxV;
int maxID;
int gang[LEN];
int sum;
set<string> ans; int getID(string s){
int id=name2ID[s];
if(id){
return id;
}else{
name2ID[s]=nID;
ID2name[nID]=s;
return nID++;
}
} void dfs(int p,int s){
vis[s]=;
cnt++;
if(w[s]>maxV){
maxV=w[s];
maxID=s;
}
for(int i=;i<nID;i++) if(g[s][i]> && i!=p){
sum+=g[s][i];
if(vis[i]) continue;
dfs(s,i);
}
} int main(){
// freopen("D:\\CbWorkspace\\PAT\\图的遍历\\1034_2.txt","r",stdin);
int n,k,i,j;
I("%d%d",&n,&k);
FF(i,n){
char buf[];
I("%s",buf);
string a(buf);
I("%s",buf);
string b(buf);
I("%d",&j);
int ai=getID(a);
int bi=getID(b);
g[ai][bi]+=j;
g[bi][ai]+=j;
w[ai]+=j;
w[bi]+=j;
}
F(i,,nID+) if(!vis[i]){
cnt=;
maxV=-;
sum=;
dfs(-,i); //深搜
if(cnt> && sum>k){
ans.insert(ID2name[maxID]);
gang[maxID]=cnt;
}
}
printf("%d\n",ans.size());
set<string>::iterator it=ans.begin();
while(it!=ans.end()){
printf("%s %d\n",it->c_str(),gang[name2ID[*it]]);
it++;
}
return ;
}
图的遍历 | 1034 map处理输入数据,连通块判断的更多相关文章
- 1034 Head of a Gang 图的遍历,map使用
命名冲突,导致编译失败.这大概就是之前看到的最好不要using namespace std:的原因
- ZOJ 3781 Paint the Grid Reloaded(DFS连通块缩点+BFS求最短路)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5268 题目大意:字符一样并且相邻的即为连通.每次可翻转一个连通块X( ...
- CodeForces 690D1 The Wall (easy) (判断连通块的数量)
题意:给定一个图,问你有几个连通块. 析:不用说了,最简单的DFS. 代码如下: #include <bits/stdc++.h> using namespace std; const i ...
- PAT Advanced 1034 Head of a Gang (30) [图的遍历,BFS,DFS,并查集]
题目 One way that the police finds the head of a gang is to check people's phone calls. If there is a ...
- 图的遍历——DFS和BFS模板(一般的图)
关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...
- 图的遍历——DFS(矩形空间)
首先,这里的图不是指的我们一般所说的图结构,而是大小为M*N的矩形区域(也可以看成是一个矩阵).而关于矩形区域的遍历问题经常出现,如“寻找矩阵中的路径”.“找到矩形区域的某个特殊点”等等之类的题目,在 ...
- ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds Me ...
- [图的遍历&多标准] 1087. All Roads Lead to Rome (30)
1087. All Roads Lead to Rome (30) Indeed there are many different tourist routes from our city to Ro ...
- 图的遍历:DFS和BFS
图的遍历一般由两者方式:深度优先搜索(DFS),广度优先搜索(BFS),深度优先就是先访问完最深层次的数据元素,而BFS其实就是层次遍历,每一层每一层的遍历. 1.深度优先搜索(DFS) 我一贯习惯有 ...
随机推荐
- linux vsftp查看ftp账号信息的方法
linux vsftp查看ftp账号信息的方法 查看注册的FTP账号 在/etc/vsftpd/chroot_list 密码看不到 只能重置密码 passwd username
- windows远程桌面无法拷贝文件的问题与解决方法
在开发完往windows服务器上部署系统或者给系统打补丁的时候,都会需要远程桌面的双向拷贝文件功能. 但是有些时候却会发现没有办法拷贝文件,原因主要有两个. 01 远程桌面的剪贴板设置 一个是在远程桌 ...
- 最简单的 kubernetes 高可用安装方式
sealos 项目地址:https://github.com/fanux/sealos 本文教你如何用一条命令构建 k8s 高可用集群且不依赖 haproxy 和 keepalived,也无需 ans ...
- Scala 系列(五)—— 集合类型综述
一.集合简介 Scala中拥有多种集合类型,主要分为可变的和不可变的集合两大类: 可变集合: 可以被修改.即可以更改,添加,删除集合中的元素: 不可变集合类:不能被修改.对集合执行更改,添加或删除操作 ...
- 让你的 vs code 跑在云上,用手机浏览器就能写代码
让你的vs code 跑在云服务器上 在B站上看到一个视频Run VS Code in the browser with massive computing resources(教你如何配置一个云ID ...
- asp.net webapi 随笔
第一次写博客,文笔有限,记录下学习的过程 话不多说,直接开干 首先用vs2017建立一个空网站项目,然后只勾选api 项目建立后,如下结构 其中WebApiConfig类配置了路由相关信息 publi ...
- C# word格式转换为pdf
引用 Microsoft.Office.Interop.Word 这个dll,可以在解决方案浏览器中搜索到并下载. 源码如下: public bool WordToPDF(string sourceP ...
- Go 笔记之如何防止 goroutine 泄露
今天来简单谈谈,Go 如何防止 goroutine 泄露. 概述 Go 的并发模型与其他语言不同,虽说它简化了并发程序的开发难度,但如果不了解使用方法,常常会遇到 goroutine 泄露的问题.虽然 ...
- vue中如果在页面中v-model的是字典,那么在定义字典的时候,需要明确定义键值为''或者[],否则给字典的键值赋值后页面不显示
如题 在template模板中 {{}} {{form_temp.blOwnerMemberList}} #是字典的形式哦 {{}} 在return的属性中 form_temp: { blOwnerM ...
- One SQL to Rule Them All – an Efficient and Syntactically Idiomatic Approach to Management of Streams and Tables(中英双语)
文章标题 One SQL to Rule Them All – an Efficient and Syntactically Idiomatic Approach to Management of S ...