• 51Nod 1378 夹克老爷的愤怒


    Description

    一棵树,可以进行染色,被染色的点可以控制与它距离不超过 (k) 的所有点,问控制整棵树最少需要染几个点.

    Sol

    贪心.

    记录一下最深的未染色点和最浅的染色点,判断一下能否在子树中就完成,不能的话就把权值赋成最深未染色点深度+1,能的话就赋成染色点深度+1.

    需要特判一下根.

    Code

    #include<cstdio>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    #include<iostream>
    using namespace std;
    
    const int N = 100005;
    
    int n,k,ans;
    int f[N];
    vector<int> g[N];
    
    inline int in(int x=0,char ch=getchar()){ while(ch>'9' || ch<'0') ch=getchar();
    	while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x; }
    void DFS(int u,int fa){
    	int mx=0,mi=0;
    	for(int i=0,v;i<g[u].size();i++) if((v=g[u][i])!=fa){
    		DFS(v,u);
    		mx=max(mx,f[v]),mi=min(mi,f[v]);
    	}
    	if(mx+1 > k) f[u]=-k,ans++;
    	else if(mx+mi+1>0) f[u]=mx+1;
    	else f[u]=mi+1;
    }
    int main(){
    	n=in(),k=in();
    	for(int i=1,u,v;i<n;i++) u=in()+1,v=in()+1,g[u].push_back(v),g[v].push_back(u);
    	DFS(1,-1);
    	if(f[1]>0) ans++;
    	cout<<ans<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    第五周总结
    第四周总结
    第三周总结
    开课博客
    学习进度
    个人作业1-数组
    数组
    第一周考试总结
    团队个人冲刺第六天
    团队个人冲刺第五天
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6026822.html
Copyright © 2020-2023  润新知