D - Erase Leaves
D - Erase Leaves
https://atcoder.jp/contests/abc333/tasks/abc333_d
思路
把这个图看成一棵树, 1作为树根,
统计 1树根关联的 子节点作为根的子树的总节点数,
去除 子树中总节点数最大子的 子树, 其它子树的总节点 记做贡献, 最后+1 (对应1节点)。
同时注意一个特殊情况, 1仅有一个子树的情况, 1退化为叶子节点, 只需要一次操作。
Code
https://atcoder.jp/contests/abc333/submissions/48592800
/******************************** GRAPH START ***************************************/ // Graph class represents a directed graph // using adjacency list representation class Graph { public: map<int, int> nodecnt; map<int, bool> visited; map<int, vector<int> > adj; // function to add an edge to graph void addEdge(int v, int w); // DFS traversal of the vertices // reachable from v void DFS(int v); }; void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Add w to v’s list. adj[w].push_back(v); // Add w to v’s list. } void Graph::DFS(int v) { // Mark the current node as visited and // print it visited[v] = true; // cout << v << " "; if (adj[v].size() == 0){ nodecnt[v] = 1; return; } // Recur for all the vertices adjacent // to this vertex list<int>::iterator i; long long nodesnum = 1; for (auto one: adj[v]){ if (!visited[one]){ DFS(one); nodesnum += nodecnt[one]; } } nodecnt[v] = nodesnum; } /******************************** GRAPH END ***************************************/ /* https://atcoder.jp/contests/abcxxx/tasks/abcxxx_d */ int n; class Graph g; int main() { cin >> n; for(int i=1; i<n; i++){ int u,v; cin >> u >> v; g.addEdge(u, v); } if(g.adj[1].size() == 1){ cout << 1 << endl; return 0; } g.DFS(1); vector<int> oneadjnodecnt; int oneadj_len = g.adj[1].size(); for(int i=0; i<oneadj_len; i++){ int oneadj_i = g.adj[1][i]; int nodes_i = g.nodecnt[oneadj_i]; oneadjnodecnt.push_back(nodes_i); // if (minnodes > nodes_i){ // minnodes = nodes_i; // } } sort(oneadjnodecnt.begin(), oneadjnodecnt.end()); int nodenumsum = 0; int oneadjnodecnt_len = oneadjnodecnt.size(); for(int i=0; i<oneadjnodecnt_len-1; i++){ nodenumsum += oneadjnodecnt[i]; } cout << nodenumsum+1 << endl; return 0; }
出处:http://www.cnblogs.com/lightsong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2020-12-16 naive bayes of sklearn
2018-12-16 Knockoutjs