【CF】244C Checkposts

本文介绍了一种使用Tarjan算法解决寻找图中联通块内最小值及其实现方法。通过实例演示了如何计算每个联通块的最小值及其出现次数,并最终计算出最小值与次数的乘积作为结果。程序实现包括了输入图的边集,输出图中每个联通块的最小值及其出现次数,以及最小值与次数的乘积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目需要求啥很明确了。主要思想是先计算机联通块,然后每个块内找到一个最小值(以及该值的次数)。最小值和结果1,次数乘积为结果2。联通块tarjan可解。

  1 /* 427C */
  2 #include <iostream>
  3 #include <string>
  4 #include <map>
  5 #include <queue>
  6 #include <set>
  7 #include <stack>
  8 #include <vector>
  9 #include <deque>
 10 #include <algorithm>
 11 #include <cstdio>
 12 #include <cmath>
 13 #include <ctime>
 14 #include <cstring>
 15 #include <climits>
 16 #include <cctype>
 17 #include <cassert>
 18 #include <functional>
 19 using namespace std;
 20 //#pragma comment(linker,"/STACK:102400000,1024000")
 21 
 22 #define mpii            map<int,int>
 23 #define vi                vector<int>
 24 #define pii                pair<int,int>
 25 #define vpii            vector<pair<int,int> >
 26 #define rep(i, a, n)     for (int i=a;i<n;++i)
 27 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
 28 #define pb                 push_back
 29 #define mp                 make_pair
 30 #define fir                first
 31 #define sec                second
 32 #define all(x)             (x).begin(),(x).end()
 33 #define SZ(x)             ((int)(x).size())
 34 #define lson            l, mid, rt<<1
 35 #define rson            mid+1, r, rt<<1|1
 36 
 37 const int maxn = 1e5+5;
 38 const int mod = 1e9+7;
 39 vi vc[maxn];
 40 int low[maxn], bn[maxn], pre[maxn];
 41 int S[maxn], top;
 42 int dfs_clock, block;
 43 int n, m;
 44 int C[maxn];
 45 int mn[maxn], cnt[maxn];
 46 
 47 void init() {
 48     memset(pre, 0, sizeof(pre));
 49     memset(bn, 0, sizeof(bn));
 50     memset(mn, 0x3f, sizeof(mn));
 51     memset(cnt, 0, sizeof(cnt));
 52     dfs_clock = block = top = 0;
 53 }
 54 
 55 void tarjan(int u) {
 56     int v;
 57     
 58     S[top++] = u;
 59     pre[u] = low[u] = ++dfs_clock;
 60     rep(i, 0, SZ(vc[u])) {
 61         v = vc[u][i];
 62         if (!pre[v]) {
 63             tarjan(v);
 64             low[u] = min(low[u], low[v]);
 65         } else if (!bn[v]) {
 66             low[u] = min(low[u], pre[v]);
 67         }
 68     }
 69     
 70     if (low[u] == pre[u]) {
 71         ++block;
 72         do {
 73             bn[S[--top]] = block;
 74         } while (S[top]!=u);
 75     }
 76 }
 77 
 78 void solve() {
 79     rep(i, 1, n+1)
 80         if (!pre[i])
 81             tarjan(i);
 82     int b, c;
 83         
 84     rep(i, 1, n+1) {
 85         b = bn[i];
 86         c = C[i];
 87         if (c< mn[b]) {
 88             mn[b] = c;
 89             cnt[b] = 1;
 90         } else if (c == mn[b]) {
 91             ++cnt[b];
 92         }
 93     }
 94     
 95     __int64 ans = 1, cost = 0;
 96     rep(i, 1, block+1) {
 97         cost += mn[i];
 98         ans = (ans * cnt[i])%mod;
 99     }
100     
101     printf("%I64d %I64d\n", cost, ans);
102 }
103 
104 int main() {
105     ios::sync_with_stdio(false);
106     #ifndef ONLINE_JUDGE
107         freopen("data.in", "r", stdin);
108         freopen("data.out", "w", stdout);
109     #endif
110     
111     int u, v;
112     
113     scanf("%d", &n);
114     rep(i, 1, n+1)
115         scanf("%d", &C[i]);;
116     scanf("%d", &m);
117     while (m--) {
118         scanf("%d %d", &u, &v);
119         vc[u].pb(v);
120     }
121     
122     init();
123     solve();
124     
125     #ifndef ONLINE_JUDGE
126         printf("time = %d.\n", (int)clock());
127     #endif
128     
129     return 0;
130 }

 

转载于:https://www.cnblogs.com/bombe1013/p/4595629.html

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值