zoukankan      html  css  js  c++  java
  • HDU 1827

    Tarjan缩点后求入度为0的点,即是要求最少电话。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int cst[1010];
    struct Edge{
    	int u,v;
    	int next;
    }edge[2010];
    int head[1010],dfn[1010],low[1010],stack[1010],st;
    bool instack[1010];
    int tot,nTime,ans,btn;
    int n,m;
    int belong[1010],label[1010];
    int edsave[2010][2];
    int degree[1010];
    void addedge(int u,int v){
    	edge[tot].u=u;
    	edge[tot].v=v;
    	edge[tot].next=head[u];
    	head[u]=tot++;
    }
    
    void tarjan(int u,int ufa){
    	dfn[u]=low[u]=++nTime;
    	stack[++st]=u;
    	instack[u]=true;
    	for(int e=head[u];e!=-1;e=edge[e].next){
    		int v=edge[e].v;
    		if(dfn[v]==-1){
    			tarjan(v,u);
    			low[u]=min(low[u],low[v]);
    		}
    		else if(instack[v]){
    			low[u]=min(low[u],dfn[v]);
    		}
    	}
    	if(dfn[u]==low[u]){
    		int v; int mincst=(1<<30)-1;
    		btn++;
    		do{
    			v=stack[st--];
    			instack[v]=false;
    			belong[v]=btn;
    			mincst=min(mincst,cst[v]);
    		}while(u!=v);
    		label[btn]=mincst;
    	}
    }
    
    int main(){
    	int u,v;
    	while(scanf("%d%d",&n,&m)!=EOF){
    		memset(head,-1,sizeof(head));
    		memset(dfn,-1,sizeof(dfn));
    		memset(low,-1,sizeof(low));
    		memset(instack,false,sizeof(instack));
    		memset(degree,0,sizeof(degree));
    		st=tot=nTime=ans=btn=0;
    		for(int i=1;i<=n;i++)
    		scanf("%d",&cst[i]);
    		for(int i=1;i<=m;i++){
    			scanf("%d%d",&u,&v);
    			edsave[i][0]=u; edsave[i][1]=v;
    			addedge(u,v);
    		}
    		for(int i=1;i<=n;i++){
    			if(dfn[i]==-1){
    				tarjan(i,0);
    			}
    		}
    		for(int i=1;i<=m;i++){
    			if(belong[edsave[i][0]]==belong[edsave[i][1]])
    			continue;
    			else degree[belong[edsave[i][1]]]++;
    		}
    		int cnt=0;
    		for(int i=1;i<=btn;i++)
    		if(degree[i]==0){
    			cnt++;
    			ans+=label[i];
    		}
    		printf("%d %d
    ",cnt,ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    asp iis5.1x 2147467259 (0x80004005)
    asp 编辑 文本框为何会自动多出个逗号?
    asp 调用Recordset对象操作数据库
    windows2003 iis中播放flv格式的视频设置
    金额拆分 "万千百"..
    类似银行交易记录
    太扯了asp
    asp中通过Connection链接数据库
    给被Access过大问题困扰的网站,提供几种解决方案
    六款WEB上传组件性能测试与比较
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4135444.html
Copyright © 2011-2022 走看看