Diary_0_2.22

news/2025/2/22 21:54:29/文章来源:https://www.cnblogs.com/Devpp/p/18731483

1. Is It A Tree?-树,并查集

  • 题意

    给定多条有向边的图,问这个图是不是一个树

  • 思路

    有两种思路

    • 一种是用邻接表构建这个图,然后以入度为 0 的点为根,遍历这个图

      如果入度为 0 的点有多个,或者在遍历的时候访问到了已经访问过的点,则不是一棵树

    • 另一种思路就是用并查集

      如果合并的时候两个点已经在同一个集合中了,或者最终根节点的个数多于 1 ,则不是一棵树

    // 思路1
    int cnt = 1;
    bool stop;
    map<int, vector<int> > tree;
    map<int, int> indgree;
    void solve(){int u, v;map<int, vector<int> > ctree;map<int, int> cindgree;swap(tree, ctree), swap(indgree, cindgree);int ccc = 0;while(cin >> u >> v){if(u==0 && v==0)    break;if(u==-1 && v==-1){stop = true;return;}ccc++;tree[u].push_back(v);indgree[u] = indgree[u];indgree[v]++;}if(ccc == 0){cout << "Case " << cnt++ << " is a tree." << endl;return;}int cc = 0, sta = -1;for(map<int, int>::iterator x=indgree.begin(); x!=indgree.end(); x++){if(x->second == 0){cc++;sta = x->first;}}if(sta == -1 || cc > 1){cout << "Case " << cnt++ << " is not a tree." << endl;return;}map<int, bool> vis;queue<int> q;q.push(sta);while(!q.empty()){int now = q.front();    q.pop();if(vis[now]){cout << "Case " << cnt++ << " is not a tree." << endl;return;}vis[now] = true;vector<int> c;swap(c, tree[now]);int len = c.size();for(int i=0; i<len; i++){int next = c[i];if(vis[next]){cout << "Case " << cnt++ << " is not a tree." << endl;return;}q.push(next);}}cout << "Case " << cnt++ << " is a tree." << endl;
    }
    signed main(){io;Test;int t;  t = 1;while(t){solve();if(stop)    break;}
    }
    
    // 思路2, 这个算法的所用的时间明显少于思路1
    int cnt = 1;
    bool stop;
    map<int, int> pre;
    int find(int now){if(pre[now] == now) return now;return pre[now] = find(pre[now]);
    }
    void solve(){int u, v, t = true;;map<int, int> cpre; swap(cpre, pre);int cc = 0;while(cin >> u >> v){if(u==0 && v==0)    break;if(u==-1 && v==-1){stop = true;return;}cc++;if(t == false)  continue;if(pre[u] == 0) pre[u] = u;if(pre[v] == 0) pre[v] = v;int ru = find(u), rv = find(v);if(ru == rv){t = false;continue;}pre[ru] = rv;}map<int, int>::iterator pos;map<int, bool> vis;for(pos=pre.begin(); pos!=pre.end(); pos++){vis[find(pos->first)] = true;				// 这里是并查集中判断是否在一个集合中的公式,很多时候都会用到}int len = vis.size();if(len > 1){t = false;}if(cc == 0) t = true;if(t)   cout << "Case " << cnt++ << " is a tree.";else    cout << "Case " << cnt++ << " is not a tree.";cout << endl;
    }
    signed main(){io;Test;int t;  t = 1;// cin >> t;while(t){solve();if(stop)    break;}
    }
    
  • 总结

    题目不难,就是简单的并查集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888191.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025/2/15课堂记录

数字转换,皇宫看守,树上dp,树的直径目录数字转换 皇宫看守数字转换这是一道树的直径题。 首先,树的直径定义是:树上两个结点之间的最短(加权)路中最长的一条路径(和二分答案没关) 但由于贪心思想,这个路径一定起点终点是两片叶子结点如图,这棵树的直径就是5,即节点…

基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真

1.课题概述基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真。利用电压外环PI调节器得到有功 电流指令值结合由负载侧电流检测 到 的无功 电流指令值 ,经由 状态解耦PI调节的电流内环控制器输出直接得到的是输出电压的指令值,用此信号作为采用控制…

【库】Coravel Schedule任务调度

Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。   下面是简单的用法,通过注入Scheduler和在中间件中定义调度的实现,来完成简单的…

【库】用Rin透视Web请求

Rin 可以捕获对 ASP.NET Core 应用程序的 HTTP 请求,并为捕获的数据提供查看器。它是调试 Web 应用程序(例如,网站、API 应用)的有用工具。先看如下代码:var builder = WebApplication.CreateBuilder(args); builder.Logging.AddRinLogger(); builder.Services.AddRin(); …

【蓝桥训练记录】第 26 场 蓝桥月赛

训练情况赛后反思 这场怎么都是猜猜乐+典题,做不出来的题真的不会了 A题 显然 2025 里面有多少个 15,除法向上取整即可点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;void solve(){cout<<ceil(1.0*2025/15…

光纤三维布里渊温度和应变分布matlab模拟与仿真

1.程序功能描述 光纤三维布里渊温度和应变分布matlab模拟与仿真。其中 , 布里渊散射是光波与声波在光纤中传播时相互作用而产生的光散射过程 , 在不 同的条件下 , 布里渊散射又分别以自发散射和受激散射两种形式表现出来 。 2.测试软件版本以及运行结果展示MATLAB2022A版…

基于一阶梯度的图像亚像素位移matlab仿真,带GUI界面

1.算法运行效果图预览 (完整程序运行后无水印)2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)% --- Executes on button press in checkbox1. function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to…

Java基础学习(十六)

Java基础学习(十六):多线程 目录Java基础学习(十六):多线程概念多线程的实现方式常见成员方法线程安全问题同步代码块同步方法Lock 锁生产者消费者模式(等待唤醒机制)线程池 本文为个人学习记录,内容学习自 黑马程序员概念进程:程序的基本执行实体 线程:操作系统能够…

AXI4-Stream Data FIFO(2.0)

IP核具体设置如下,数据宽度64bit,深度32,启用了包传输。打开Example Design三个IP核和两个AXI读写模块。 clk_wiz_0是mmcm IP核,提供工作时钟,proc_sys_reset_0是系统复位 IP核,提供复位信号,axis_data_fifo是本次的仿真IP 核。 axis_data_fifo_example_master是写模块,…

DeepSeek宣布下周开源5大项目,这才是真OpenAI!

近日,DeepSeek 团队宣布将在下周连续开源 5 个项目。这一举措不仅吸引了众多开发者的目光,还在技术社区引发了热烈讨论,不少网友甚至将 DeepSeek 誉为 “真正的 OpenAI”。一、DeepSeek开源计划详情(一)开源时间与方式DeepSeek团队决定开展“OpenSourceWeek”(开源周)活…

NOIP 2024 游记 | Loser.

Loser. p.s. 本文章比较废话()Day 1 早上 6:30 被拽起来了。吃饭。出门。坐地铁。到! 华科大门,比,华师气派多了诶诶。扯了个横幅,拍照。拍照。拍照。 诶诶,怎么 7:45 就拽着我们进去了。 进考场。我怎么是第一排第一个 /jk 看见了 @Hakureireimu_cjrljpx,但是他不认识…