hdu1827 Summer Holiday【强连通+贪心】
来源:互联网 发布:windows临时账户登录 编辑:程序博客网 时间:2024/05/17 23:24
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1827
题意:中文题
解析:首先做强连通缩点,每一个强连通分量里的每个点都是可以互相联系的,而对于每个强连通分量之间,如果一个强连通的入度为零,那么你不得不联系他,否则一定可以通过其他人联系到这一群人,所以,把每个强连通分量的入度处理出来,然后找入度为零的强连通分量,去里面的最小值,求和即是答案
#include <bits/stdc++.h>using namespace std;const int maxn = 1005;const int inf = 0x7fffffff;vector<int>G[maxn];vector<int>rG[maxn];vector<int>vs;int vis[maxn],cmp[maxn];int in[maxn];int a[maxn];void init(int n){ for(int i=0;i<=n;i++) { G[i].clear(); rG[i].clear(); }}void addEdge(int from,int to){ G[from].push_back(to); rG[to].push_back(from);}void dfs(int u){ vis[u] = 1; for(int i=0;i<(int)G[u].size();i++) { int v = G[u][i]; if(!vis[v]) dfs(v); } vs.push_back(u);}void rdfs(int u,int k){ vis[u] = 1; cmp[u] = k; for(int i=0;i<(int)rG[u].size();i++) { int v = rG[u][i]; if(!vis[v]) rdfs(v,k); }}void slove(int n){ memset(in,0,sizeof(in)); memset(vis,0,sizeof(vis)); vs.clear(); for(int i=1;i<=n;i++) { if(!vis[i]) dfs(i); } memset(vis,0,sizeof(vis)); int k = 0; for(int i=vs.size()-1;i>=0;i--) { if(!vis[vs[i]]) rdfs(vs[i],k++); } for(int i=1;i<=n;i++) { for(int j=0;j<(int)G[i].size();j++) { int v = G[i][j]; if(cmp[i]!=cmp[v]) in[cmp[v]]++; } } int res = 0,ans = 0; for(int i=0;i<k;i++) { if(in[i]==0) { res++; int mi = inf; for(int j=1;j<=n;j++) { if(cmp[j]==i) mi = min(a[j],mi); } ans += mi; } } printf("%d %d\n",res,ans);}int main(void){ int n,m; while(~scanf("%d %d",&n,&m)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); init(n); for(int i=0;i<m;i++) { int x,y; scanf("%d %d",&x,&y); addEdge(x,y); } slove(n); } return 0;}
阅读全文
0 0
- hdu1827 Summer Holiday【强连通+贪心】
- HDU1827:Summer Holiday【强连通】
- hdu1827 Summer Holiday(强连通,缩点建图)
- HDU1827 Summer Holiday 强连通 Tarjan 缩点 统计
- [HDU1827]Summer Holiday(Tarjan缩点+强连通分量)
- HDU1827:Summer Holiday(缩点 & 贪心)
- HDU1827 Summer Holiday(强连通+缩点+最小传递费用)
- HDU1827 Summer Holiday 解题报告【tarjan/强连通分量+缩点】
- HDU - 1827 Summer Holiday(强连通分量+贪心)
- hdu1827 Summer Holiday (Tarjan)
- HDU1827 Summer Holiday
- HDU1827 Summer Holiday
- HDU1827 Summer Holiday(强连通缩点建图)
- hdu1827 Summer Holiday(Tarjan缩点+贪心)
- HDU 1827 Summer Holiday(强连通分量)
- HDU 1827 Summer Holiday(强连通)
- 强连通图之HDU1287 Summer Holiday
- HDU 1827 Summer Holiday(强连通分量)
- laya之坑--ts与as的区别(一)
- 算法之道,结构之法,非常有用
- 数据结构面试题/求二叉树叶子节点的个数/求二叉树第k层的节点个数
- hdu 3410 Passing the Message
- 用MFC如何高效地绘图
- hdu1827 Summer Holiday【强连通+贪心】
- MAC下如何快速调出终端运行窗口
- Windows 10 快捷键汇总表格
- 即时聊天服务器端
- 即时聊天线程
- hihocoder [Offer收割]编程练习赛19
- Matrix Chain Multiplication,UVa 442个人见解
- MAC如何安装和破解Office
- 即时聊天客户端