hdu5438 dfs+并查集 长春网赛
先dfs对度小于2的删边,知道不能删为止。
然后通过并查集来计算每一个分量里面几个元素。
#include<iostream>
#include<cstring>
#include<vector>
#define maxn 10010
#define LL __int64
using namespace std;
int in[maxn],vis[maxn],p,pa[maxn],cou[maxn];
LL sum[maxn];
vector<int>mp[maxn];
void dfs(int u)
{
int i;
vis[u]=;
for(i=;i<mp[u].size();i++)
{
in[u]--;
in[mp[u][i]]--;
if(!vis[mp[u][i]]&&in[mp[u][i]]<)
dfs(mp[u][i]);
}
}
int Find(int x)
{
if(x!=pa[x])
pa[x]=Find(pa[x]);
return pa[x];
}
int main()
{
int i,j,t,q;
cin>>t;
while(t--)
{
cin>>p>>q;
for(i=;i<=p;i++)
{
mp[i].clear();
pa[i]=i;
cou[i]=;
vis[i]=;
in[i]=;
}
for(i=;i<=p;i++)
{
cin>>sum[i];
}
while(q--)
{
int x,y;
cin>>x>>y;
mp[x].push_back(y);
mp[y].push_back(x);
in[x]++;
in[y]++;
}
int flag;
while()
{
flag=;
for(i=;i<=p;i++)
{
if(!vis[i]&&in[i]<)
{
flag=;
break;
}
}
if(flag==)
break;
for(i=;i<=p;i++)
{
if(!vis[i]&&in[i]<)
{
dfs(i);
}
}
}
/*for(i=1;i<=p;i++)
{
printf("%d ",in[i]);
}
printf("\n");
for(i=0;i<mp[1].size();i++)
{
printf("%d ",mp[1][i]);
}
printf("\n");*/
for(i=;i<=p;i++)
{
if(vis[i])continue;
int fx=Find(i);
int num=mp[i].size();
//printf("%d ",fx);
for(j=;j<num;j++)
{
if(!vis[mp[i][j]]&&in[mp[i][j]]>=)
{
int fy=Find(mp[i][j]);
if(fx==fy)continue;
//printf("%d ",mp[i][j]);
pa[fy]=fx;
sum[fx]+=sum[fy];
cou[fx]+=cou[fy];
//printf("%d ",cou[fx]);
}
}
//printf("\n");
}
LL ans=;
for(i=;i<=p;i++)
{
if(pa[i]==i&&!vis[i]&&cou[i]%&&cou[i]!=)
{
//printf("%I64d ",sum[i]);
ans+=sum[i];
}
}
//puts("");
printf("%I64d\n",ans);
}
}
/*
9 9
1 2 3 4 5 6 7 8 9
1 2
2 3
3 4
1 4
2 5
5 6
7 8
8 9
7 9
*/
hdu5438 dfs+并查集 长春网赛的更多相关文章
- hdu5441 并查集 长春网赛
对于每次询问的大的值,都是从小的值开始的,那就从小到大处理,省去很多时间,并且秩序遍历一遍m; 这题cin容易超时,scanf明显快很多很多.G++又比C++快; //这代码scanf400+,cin ...
- ZOJ 3811 / 2014 牡丹江赛区网络赛 C. Untrusted Patrol bfs/dfs/并查集
Untrusted Patrol Time Limit: 3 Seconds Memory Limit: 65536 KB ...
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- 分珠(dfs+并查集)
1140 分珠 时间限制:500MS 内存限制:65536K提交次数:24 通过次数:18 题型: 编程题 语言: G++;GCC Description 如下图所示,有若干珠子,每颗珠子重量不 ...
- Codeforces 1027D Mouse Hunt (强连通缩点 || DFS+并查集)
<题目链接> 题目大意: 有n个房间,每个房间都会有一只老鼠.处于第i个房间的老鼠可以逃窜到第ai个房间中.现在要清理掉所有的老鼠,而在第i个房间中防止老鼠夹的花费是ci,问你消灭掉所有老 ...
- CodeForces - 455C Civilization (dfs+并查集)
http://codeforces.com/problemset/problem/455/C 题意 n个结点的森林,初始有m条边,现在有两种操作,1.查询x所在联通块的最长路径并输出:2.将结点x和y ...
- PAT甲题题解-1021. Deepest Root (25)-dfs+并查集
dfs求最大层数并查集求连通个数 #include <iostream> #include <cstdio> #include <algorithm> #inclu ...
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- 1021. Deepest Root (25)——DFS+并查集
http://pat.zju.edu.cn/contests/pat-a-practise/1021 无环连通图也可以视为一棵树,选定图中任意一点作为根,如果这时候整个树的深度最大,则称其为 deep ...
随机推荐
- C# 统一对 try...catch 的调用,方便保存错误日志
每个优秀的开发人员,应该尽可能保证程序稳定运行,在确实不需要使用try...catch的地方尽尽量不要使用以提高程序性能. 但是我们不可能保证每段代码不会出错,由于出错引起的用户界面并不友好,而且有可 ...
- 把char[]数组里面的内容用MessageBox显示出来
const char *q; q = mysql_get_client_info(); //获得一字符串指针 CString p(q); AfxMessageBox(p);
- java代理概念
代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的. 动态代理技术就是用来产生一个对象的代理对象的 ...
- Linux时间介绍
Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...
- maven-home
E:/Soft/Maven/apache-maven-3.3.3 E:\Soft\Maven\apache-maven-3.3.3\conf\settings.xml E:\DellWork\Mave ...
- 华为云DevCloud一枝独秀
DevOps,是Development和Operations的组合词,是指一组过程.方法与系统的统称,用于促进开发.技术运营和质量保障部门之间的沟通.协作与整合.DevOps是一种重视“软件开发人员( ...
- PHP1.6--数组
一.数组的键值操作函数 1.array_values() 函数作用是返回数组中所有元素的值,只有一个参数,规定传人给定数组,返回一个包含给定数组中所有值的数组,但不保留键名 被返回的数组将使用顺序的数 ...
- Vue.js系列之项目搭建(vue2.0 + vue-cli + webpack )
1.安装node node.js环境(npm包管理器) cnpm npm的淘宝镜像 从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装).安装完成之后,打开命令 ...
- JPinyin繁体相互转换
// 用正则表达式"[\u4e00-\u9fa5]"匹配 字符串 Scanner sc =new Scanner(System.in);System.out.println(&qu ...
- CesiumLab 地形数据处理
最近接连有用户反应地形数据处理的各种问题,我也是各种测试,想想还是整理一个文档彻底说明一下. 地形栅格数据格式,一般是tif ,也有dem或者img,但是我个人强烈建议使用tif格式,因为cesium ...