• cf965e Short Code


    ref

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    using namespace std;
    int n, tot, dfn[100005], s[100005][26], dep[100005], idx, siz[100005], ans;
    bool iss[100005];
    char ss[100005];
    vector<int> vec[100005];
    void insert(){
    	int u=0;
    	int len=strlen(ss);
    	for(int i=0; i<len; i++){
    		int t=ss[i]-'a';
    		if(!s[u][t])	s[u][t] = ++tot;
    		u = s[u][t];
    	}
    	iss[u] = true;
    }
    void dfs(int x, int d){
    	dep[x] = d;
    	dfn[x] = ++idx;
    	siz[x] = 1;
    	for(int i=0; i<26; i++)
    		if(s[x][i]){
    			dfs(s[x][i], d+1);
    			siz[x] += siz[s[x][i]];
    		}
    }
    void faq(int x){
    	for(int i=0; i<26; i++)
    		if(s[x][i]){
    			faq(s[x][i]);
    			if(vec[x].size()<vec[s[x][i]].size())	swap(vec[x], vec[s[x][i]]);
    			for(int j=0; j<vec[s[x][i]].size(); j++){
    				vec[x].push_back(vec[s[x][i]][j]);
    				push_heap(vec[x].begin(), vec[x].end());
    			}
    			vec[s[x][i]].clear();
    		}
    	if(!iss[x] && x && vec[x].size()){
    		pop_heap(vec[x].begin(), vec[x].end());
    		vec[x].pop_back();
    		vec[x].push_back(dep[x]);
    		push_heap(vec[x].begin(), vec[x].end());
    	}	
    	if(iss[x]){
    		vec[x].push_back(dep[x]);
    		push_heap(vec[x].begin(), vec[x].end());
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=1; i<=n; i++){
    		scanf("%s", ss);
    		insert();
    	}
    	dfs(0, 0);
    	faq(0);
    	for(int i=0; i<vec[0].size(); i++)
    		ans += vec[0][i];
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    Oracle数据库中。varchar 和 varchar2的区别
    gvim 编辑器初学
    鼠标事件以及clientX、offsetX、screenX、pageX、x的区别
    清除浮动的5种方法
    按钮的单双击事件
    webstrom中的快捷键
    限制 input 输入框只能输入纯数字
    控制<标签>不可被点击
    way.js
    ECharts 折线图and柱状图
  • 原文地址:https://www.cnblogs.com/poorpool/p/8977367.html
Copyright © 2020-2023  润新知