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和指针》基础篇(Chpt.1~Chpt.9)
导语 近日,笔者在课业之余阅读了<C和指针(Pointers on C)> (by Kenneth A.Reek)一书,从中记录了关于C语言的诸多知识点,包括在C语言基础特性的学习过程中没 ...
- css之页面三列布局之左右两边宽度固定,中间自适应
左右两边宽度固定,中间自适应 左右两边绝对定位 可以利用浮动,左边的左浮动,右边的右浮动 css3 flex布局(html http://www.cnblogs.com/myzy/p/5919814. ...
- 四种基本组合博弈POJ1067/HDU1846
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43466 Accepted: 14760 Descripti ...
- jnhs-SpringMVC jsp页面向controller传递参数的五种方式
一共是五种传参方式: 一:直接将请求参数名作为Controller中方法的形参 public String login (String username,String password) : 解 ...
- Web前端开发工程师需要掌握哪些核心技能?
Web前端开发所涉及的内容主要包括W3C标准中的结构.行为和表现,那么这三项中我们需要掌握的核心技能是什么呢? 1.开发语言 HTML发展历史有二十多年,历经多次版本更新,HTML5和CSS3的出现又 ...
- 使用Python进行文件操作
作为高级语言,对文件进行操作时必不可少的功能.那么,Python是怎么对文件进行操作的呢? 1.什么是文件? 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容. 文件包括两种类型:文本文件 ...
- java-多线程安全-锁
一 同步函数 1.1 一般的方法 同步的另一种体现形式:同步函数. 同步函数使用的锁是哪个?经过分析:大概猜的是this,因为函数必须被对象调用. 验证:写一个同步代码块,写一个同步函数,如果同步代码 ...
- UVA1204 Fun Game
Fun Game https://odzkskevi.qnssl.com/8d698323a1e07d605cdeea708ee8a01d?v=1508703139 [题解] 不难发现如果一个串的原串 ...
- 缺氧debug模式开启及功能
在游戏OxygenNotIncluded_Data文件夹创建一个debug_enable.txt的空文本文档 在缺氧目录下添加debug_enable.txt文件 按删除键就可以开启debug模式 需 ...
- CSS-DOM的小知识(一)
在DOM编程艺术中,CSS-DOM应用很广泛. 1.style属性 通过element.style.property可以获得元素的样式,但是style属性只能够返回内嵌样式,对于外部样式表的样式和he ...