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 ...
随机推荐
- Bootstrap.之模态框 显示在遮罩层后面
Bootstrap.之模态框 显示在遮罩层后面 问题描述: 在使用bootstrap模态框,弹出的窗口在遮罩层后面,见图: 解决方案: 保证模态框的代码,所在的上一级(父元素)是body标签,即可.例 ...
- VS2005+VTK读入点云文件
使用VTK读入点云文件的基础代码: 头文件: 也许不是全部都用到,为了接下来得工程还是全部都包含进去了 #include "vtkRenderer.h" #include &quo ...
- hive启动一些错误记录
java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMeta ...
- VirtualBox新建虚拟机常用配置
1.内存给到1G,不然无法进入图形界面进行分区配置及软件包选择.虚拟机存储记得放到D盘. 2.网络选择桥接模式以便SSH,初次登陆后配置/etc/sysconfig/network-scripts/i ...
- Luogu P3459 [POI2007]MEG-Megalopolis(线段树)
P3459 [POI2007]MEG-Megalopolis 题意 题目描述 Byteotia has been eventually touched by globalisation, and so ...
- vue 如何发起网络请求 之 axios
1 1 2 3 4 5 6 7 8 9 10 // axios 请求 在main.js里边写入 import Axios from 'axios' // 配置请求信息 var $http = ...
- No module named zope.interface error 的解决
在 import zope.interface 时,出现错误 No module named zope.interface error根据 http://stackoverflow.com/quest ...
- jquery 点击图片弹出遮罩层查看大图
<div class="photobox"> <ul> <li data-date="'+data[i].id+'"> &l ...
- 字符串无法分割 split无效: java split()使用“.” “\” "|" "*" "+"要转义
.是特殊字符 特殊字符需要转义. 改成split(“\\.”)
- Java处理正则验证手机号-详解
参考博客:https://www.cnblogs.com/wangzn/p/7212587.html https://www.cnblogs.com/go4mi/p/6426215.html pack ...