hdu 1827
强连通分量——tarjin算法;
这题的思路就是找出多少个出度为0的连通分量,结果就是这些连通分量的元素的最小值相加;
一道很简单的题,改了我好久,= =!~
贴代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#include<vector>
#define maxn 1005
using namespace std; int dfn[maxn],low[maxn],pen[maxn],b[maxn];
int nncount,ans,cc[maxn],cnt,in[maxn];
bool instack[maxn];
vector<int>ve[maxn];
stack<int>s; void tarjin(int x)
{
dfn[x]=low[x]=++nncount;
instack[x]=;
s.push(x);
int l=ve[x].size();
for(int i=; i<l; i++)
{
int v=ve[x][i];
if(!dfn[v])
{
tarjin(v);
low[x]=min(low[v],low[x]);
}
else if(instack[v])
low[x]=min(low[x],dfn[v]);
}
if(dfn[x]==low[x])
{
cnt++;
int t;
do
{
t=s.top();
s.pop();
b[t]=cnt;
instack[t]=;
}
while(t!=x);
}
} int main()
{
int n,m,x,y,sum;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(low,,sizeof low);
memset(b,,sizeof b);
memset(dfn,,sizeof dfn);
memset(in,,sizeof in);
memset(cc,,sizeof cc);
memset(instack,,sizeof instack);
nncount=ans=sum=cnt=;
for(int i=; i<=n; i++)
{
scanf("%d",&pen[i]);
ve[i].clear();
}
while(!s.empty()) s.pop();
for(int i=; i<m; i++)
{
scanf("%d%d",&x,&y);
ve[x].push_back(y);
}
for(int i=; i<=n; i++)
if(!dfn[i])
tarjin(i);
for(int i=; i<=n; i++)
{
int l=ve[i].size();
for(int j=; j<l; j++)
{
int v=ve[i][j];
if(b[i]!=b[v]) in[b[v]]++;
}
}
for(int i=; i<=cnt; i++)
{
if(in[i]==)ans++;
cc[i]=;
}
for(int i=; i<=n; i++)
{
int v=b[i];
if(in[v]==) cc[v]=min(cc[v],pen[i]);
}
for(int i=; i<=cnt; i++)
if(cc[i]!=)
sum+=cc[i];
printf("%d %d\n",ans,sum);
}
return ;
}
hdu 1827的更多相关文章
- Tarjan系列算法总结(hdu 1827,4612,4587,4005)
tarjan一直是我看了头大的问题,省选之前还是得好好系统的学习一下.我按照不同的算法在hdu上选题练习了一下,至少还是有了初步的认识.tarjan嘛,就是维护一个dfsnum[]和一个low[],在 ...
- HDU 1827 Summer Holiday(强连通)
HDU 1827 Summer Holiday 题目链接 题意:中文题 思路:强连通缩点,每一个点的权值为强连通中最小值,然后入度为0的点就是答案 代码: #include <cstdio> ...
- HDU 1827:Summer Holiday(强连通)
http://acm.hdu.edu.cn/showproblem.php?pid=1827 思路:强连通分量缩点后找入度为0的点,然后对于属于该强连通分量的找一个最小耗费的入口. #include ...
- HDU 1827 Summer Holiday
http://acm.hdu.edu.cn/showproblem.php?pid=1827 题意: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家 ...
- 强连通 HDU 1827
n个点m条边 n个权lcy 要叫这个人的花费 m条边 缩点后 新的图中 入度为0的点要通知 通知强连通分量中权值最小的 #include<stdio.h> #include<alg ...
- HDU 1827 Summer Holiday(Tarjan缩点)
Problem Description To see a World in a Grain of Sand And a Heaven in a Wild Flower, Hold Infinity ...
- HDU - 1827 Summer Holiday (强连通)
<题目链接> 题目大意: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间 ...
- HDU 1827 Summer Holiday(tarjan求强连通分量+缩点构成新图+统计入度+一点贪心思)经典缩点入门题
Summer Holiday Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 1827 强连通 缩点 Summer Holiday
求出强连通分量,因为强连通中只要有一个人被通知到了,所有人都能被通知到. 缩点以后形成一个DAG,找出那些入度为0的点,累加上它们的权值就是答案.一个点的权值等于SCC中权值最小的那个点. #incl ...
随机推荐
- c语言,strcat(),字符串拼接
#include<stdio.h> #include<string.h> int main() { char destination[25]; char *zhang=& ...
- Java中的编码问题
下面将侧重介绍java乱码是如何产生的.存在哪些乱码的情况.该如何从根本上解决乱码问题.各位随博主一起征服令人厌烦的java乱码问题吧!!! 一.Java编码转换过程 我们总是用一个java类文件和用 ...
- JQuery设置缓慢下拉大行多次执行的解决办法,以及stop()函数的简单理解
$(function(){ $('.all>li').mouseover(function(e) { $(this).children().stop().slideDown(300 ...
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent ...
- HDU-1034(简单模拟)
Candy Sharing Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Unity3D 之3D游戏SD快打 3D游戏基础入门开发全(1)
这里记录一个U3D游戏,3D游戏的基本开发. 导入素材 1.首先导入需要的素材.因为FBX格式的素材是通用的,所以尽量导入这样的资源使用 导入后的结果: 然后对人形骨骼进行设置. 看哪里没有映射到骨骼 ...
- web开发学习之旅---html第二天
一.转义符 一些字符在html中拥有特殊的含义,比如小于号(<)用于定义 HTML 标签的开始.如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入转义符. 分类 二.html ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频
http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...
- DOS命令教学之详解批处理
批处理文件是由一个或一个以上的DOS命令及可执行命令组成的带有扩展名.BAT的文件.当用户以批处理文件名为命令时,DOS会自动依次执行文件中的命令.批处理文件的特点是一次建立可多次执行.下面,寻修网h ...
- sharepoint2013 新建母板页 新建页面布局 关联母板页和页面布局
1 母板页的应用和layout(页面布局)的创建和应用 母板页上传:将准备好的html和样式 通过spd中的导入方式导入模版html, 导入后: 然后在网站设置中进行转换为母板页. 随后编辑 ...