# Summer Holiday

Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2371    Accepted Submission(s): 1111

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

Input

Output

Sample Input
12 16 2 2 2 2 2 2 2 2 2 2 2 2 1 3 3 2 2 1 3 4 2 4 3 5 5 4 4 6 6 4 7 4 7 12 7 8 8 7 8 9 10 9 11 10

Sample Output
3 6

Author

Source

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<vector>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=100010;
int MIN(int a,int b){
return a<b?a:b;
}
int value[maxn];
int scc_cnt,dfs_clock;
int sccno[maxn];
int dfn[maxn];
int low[maxn];
int num[maxn];
int in[maxn];
int out[maxn];
bool instack[maxn];
stack<int>S;
vector<int>scc[maxn];
vector<int>G[maxn];
struct Node{
int from,to,next;
}A[maxn];
void init(){
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
memset(instack,false,sizeof(instack));
memset(sccno,0,sizeof(sccno));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
memset(value,0x3f,sizeof(value));
scc_cnt=dfs_clock=0;
}
void tarjan(int u,int pre){
low[u]=dfn[u]=++dfs_clock;
S.push(u);instack[u]=true;
int v;
v=A[k].to;
if(!dfn[v]){
tarjan(v,u);
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();
while(1){
v=S.top();S.pop();
instack[v]=false;
sccno[v]=scc_cnt;
G[scc_cnt].clear();
scc[scc_cnt].push_back(v);
value[scc_cnt]=MIN(value[scc_cnt],num[v]);
if(v==u)break;

}
}
}
void suodian(int m){
for(int i=0;i<m;++i){
int u=sccno[A[i].from];
int v=sccno[A[i].to];
if(u!=v){
G[u].push_back(v);
in[v]++;out[u]++;
}
}
}
int main()
{
int n,m,i,j,k;
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(i=1;i<=n;++i){
scanf("%d",&num[i]);
}
int a,b;
for(i=0;i<m;++i){
scanf("%d%d",&a,&b);
A[i].from=a;
A[i].to=b;
}
for(i=1;i<=n;++i){
if(!dfn[i])tarjan(i,-1);
}
suodian(m);
int ans1=0,ans2=0;
for(i=1;i<=scc_cnt;++i){
if(in[i]==0){
ans1++;
ans2+=value[i];
}
}
printf("%d %d\n",ans1,ans2);
}
return 0;
}

• 本文已收录于以下专栏：

## hdoj-1827-Summer Holiday(scc+缩点)

Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)...
• qq_29963431
• 2015年10月23日 17:49
• 177

## poj2186Popular Cows【scc+缩点】

Language: Default Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total S...
• R1986799047
• 2015年11月19日 11:45
• 246

## hdoj--2767--Proving Equivalences （scc+缩点）

Proving Equivalences Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Oth...
• qq_29963431
• 2015年10月23日 20:38
• 179

## poj--2186--Popular Cows (scc+缩点）

Popular Cows Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To...
• qq_29963431
• 2015年10月23日 21:27
• 175

## hdoj2767Proving Equivalences【scc+缩点】

Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
• R1986799047
• 2015年11月20日 21:21
• 288

## poj--1236--Network of Schools（scc+缩点）

Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1406...
• qq_29963431
• 2016年01月12日 15:27
• 163

## hdoj--3072--Intelligence System(scc+缩点+数据去重)

Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth...
• qq_29963431
• 2015年10月24日 11:37
• 209

## nyoj--120--校园网络（scc+缩点）

• qq_29963431
• 2016年01月12日 11:55
• 239

## CF758 A. Holiday Of Equality （水题）

• L954688947
• 2017年01月20日 02:21
• 155

## HDU1827：Summer Holiday（缩点 & 贪心）

Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)...
• junior19
• 2017年08月11日 23:36
• 63

举报原因： 您举报文章：hdoj1827Summer Holiday【scc+缩点】 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)