HDU1827:Summer Holiday【强连通】
来源:互联网 发布:日语发音软件免费 编辑:程序博客网 时间:2024/06/11 21:01
Summer Holiday
Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2345 Accepted Submission(s): 1100
Problem Description
To see a World in a Grain of Sand
And a Heaven in a Wild Flower,
Hold Infinity in the palm of your hand
And Eternity in an hour.
—— William Blake
听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至少得花多少电话费就能让所有人都被通知到吗?
And a Heaven in a Wild Flower,
Hold Infinity in the palm of your hand
And Eternity in an hour.
—— William Blake
听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至少得花多少电话费就能让所有人都被通知到吗?
Input
多组测试数组,以EOF结束。
第一行两个整数N和M(1<=N<=1000, 1<=M<=2000),表示人数和联系对数。
接下一行有N个整数,表示Wiskey联系第i个人的电话费用。
接着有M行,每行有两个整数X,Y,表示X能联系到Y,但是不表示Y也能联系X。
第一行两个整数N和M(1<=N<=1000, 1<=M<=2000),表示人数和联系对数。
接下一行有N个整数,表示Wiskey联系第i个人的电话费用。
接着有M行,每行有两个整数X,Y,表示X能联系到Y,但是不表示Y也能联系X。
Output
输出最小联系人数和最小花费。
每个CASE输出答案一行。
每个CASE输出答案一行。
Sample Input
12 162 2 2 2 2 2 2 2 2 2 2 2 1 33 22 13 42 43 55 44 66 47 47 127 88 78 910 911 10
Sample Output
3 6AC—code:#include<cstdio>#include<cstring>#include<stack>#include<vector>#define MAXN 1005#define MAXM 2006 #define INF 0x3f3f3f#define min(a,b) a>b?b:ausing namespace std;int low[MAXN],dfn[MAXN],scc_cnt,dfs_clock;int sccno[MAXN];vector<int>scc[MAXN];stack<int>s;bool instack[MAXN];struct Edge{int from,to,next;}edge[MAXM];int head[MAXN],edgenum;int init(){edgenum=0;memset(head,-1,sizeof(head));}void add(int a,int b){Edge E={a,b,head[a]};edge[edgenum]=E;head[a]=edgenum++;}void tarjan(int u){int v;low[u]=dfn[u]=++dfs_clock;s.push(u);instack[u]=1;for(int i=head[u];i!=-1;i=edge[i].next){v=edge[i].to;if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}else if(instack[v])low[u]=min(low[u],dfn[v]);}if(low[u]==dfn[u]){scc_cnt++;scc[scc_cnt].clear();for(;;){v=s.top();s.pop();instack[v]=0;sccno[v]=scc_cnt;scc[scc_cnt].push_back(v);if(v==u)break;}}}void find_cut(int r){memset(low,0,sizeof(low));memset(dfn,0,sizeof(dfn));memset(sccno,0,sizeof(sccno));memset(instack,0,sizeof(instack));dfs_clock=scc_cnt=0;for(int i=1;i<=r;i++)if(!dfn[i])tarjan(i);}vector<int>G[MAXN];int out[MAXN],in[MAXN];void suodian(){int i;for(i=1;i<=scc_cnt;i++)G[i].clear(),in[i]=out[i]=0;for(i=0;i<edgenum;i++){int u=sccno[edge[i].from];int v=sccno[edge[i].to];if(u!=v)G[u].push_back(v),out[u]++,in[v]++; } }int main(){int a,b,n,i,m,cost[MAXN];while(scanf("%d%d",&n,&m)!=EOF) {init();for(i=1;i<=n;i++)scanf("%d",&cost[i]);while(m--){scanf("%d%d",&a,&b);add(a,b);}find_cut(n);suodian();int ans1=0,ans2=0;int val[MAXN];for(i=1;i<=scc_cnt;i++){if(in[i]==0)ans1++;val[i]=INF;}for(i=1;i<=n;i++){int t=sccno[i];if(in[t]==0)val[t]=min(val[t],cost[i]);}for(i=1;i<=scc_cnt;i++){if(val[i]!=INF){ans2+=val[i];}}printf("%d %d\n",ans1,ans2); } 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 解题报告【tarjan/强连通分量+缩点】
- hdu1827 Summer Holiday (Tarjan)
- HDU1827 Summer Holiday
- HDU1827 Summer Holiday
- HDU1827 Summer Holiday(强连通缩点建图)
- HDU 1827 Summer Holiday(强连通分量)
- HDU 1827 Summer Holiday(强连通)
- 强连通图之HDU1287 Summer Holiday
- HDU 1827 Summer Holiday(强连通分量)
- hdu 1827 summer holiday 强连通分量
- hdu1827——Summer Holiday
- hdu1827 Summer Holiday(scc应用)
- Linux上安装opencv(亲测可用)
- 大型网站架构演进过程
- HDOJ 1217 Arbitrage 【Floyd 有负权】
- Git 查询某次历史提交的修改内容
- 常用函数库——调试函数
- HDU1827:Summer Holiday【强连通】
- 1.zabbix学习笔记:zabbix的安装
- 第26讲 项目:投票表决器
- 欢迎使用CSDN-markdown编辑器
- 字符搜索
- C# 多线程学习系列三:线程优先级、线程同步以及向线程传递参数
- AsyncTask和Handler对比
- php工具类——导出excel
- C语言格式化输入输出