SDUT 2023 summer team contest(for 22) - 13

news2024/11/24 9:38:26

B - Hoppers

 题意:给你一张无向图,可以选定一个点染色,随后距离为2的点都会被染色(可以传染)。求至少需要向图中添加几条边使得选定一个点染色后可以将整个图染色。(不一定是连通图)

思路:如果一个连通块是一个二分图,那么只能染色二分图的一部;如果一个连通块不是二分图,那么这个连通块可以被完全染色。(就是看有没有奇数环,二分图一定没有奇数环)

求出连通块的数量k以及是否有非二分图连通块,如果有非二分图那么只要用k-1条边把k个连通块连成一个非二分图连通块即可。如果没有非二分图那么用k-1条边连起来后还是个二分图连通块,需要再加一条边变成非二分连通块。

所以如果有非二分图(奇数环)ans=连通块数-1

否则ans=联通块数

这里写了两种方法,一个dfs,一个二分图染色(其实都差不多)

1:二分图染色

#include <bits/stdc++.h>
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl "\n"
#define lowbit(x) x & (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 18446, P = 13331;
const double eps = 1e-8;
int n, m;
bool flag;
int p[N];
int siz[N];
int st[N];
vector<int> g[N];
vector<int> now;
int find(int x)
{
  if (x != p[x])
    p[x] = find(p[x]);
  return p[x];
}
void merge(int x, int y)
{
  int a = find(x), b = find(y);
  if (a != b)
  {
    p[b] = a;
    siz[a] += siz[b];
  }
}
bool dfs(int u, int c)
{
  st[u] = c;
  for (auto ed : g[u])
  {
    if (st[ed])
    {
      if (st[ed] == c)
        return false;
    }
    else if (!dfs(ed, 3 - c))
      return false;
  }
  return true;
}
void solve()
{
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
  {
    p[i] = i;
    siz[i] = 1;
  }
  for (int i = 1; i <= m; i++)
  {
    int a, b;
    cin >> a >> b;
    g[a].pb(b);
    g[b].pb(a);
    merge(a, b);
  }
  int ans = 0;
  for (int i = 1; i <= n; i++)
  {
    if (p[i] == i)
      ans++;
  }
  for (int i = 1; i <= n; i++)
  {
    if (!st[i])
    {
      if (!dfs(i, 1))
        flag = 1;
    }
  }
  if (flag)
    cout << ans - 1 << endl;
  else
    cout << ans << endl;
}
signed main()
{
  Ysanqian;
  int T;
  T = 1;
  // cin >> T;
  while (T--)
    solve();
  return 0;
}

2:dfs

#include <bits/stdc++.h>
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl "\n"
#define lowbit(x) x & (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 18446, P = 13331;
const double eps = 1e-8;
int n, m;
bool flag;
int d[N];
vector<int> g[N];
void dfs(int u, int color)
{
  d[u] = color;
  for (auto ed: g[u])
  {
    if (!d[ed])
      dfs(ed, -color);
    else if (d[u] == d[ed])//临边有相同的颜色,即为非二分图,含有奇数环
      flag = 1;
  }
}
void solve()
{
  cin >> n >> m;
  for (int i = 1; i <= m; i++)
  {
    int a, b;
    cin >> a >> b;
    g[a].pb(b);
    g[b].pb(a);
  }
  int ans = 0;
  for (int i = 1; i <= n; i++)
  {
    if (!d[i])
    {
      dfs(i, 1);
      ans++;
    }
  }
  if (flag)
    cout << ans - 1 << endl;
  else
    cout << ans << endl;
}
signed main()
{
  Ysanqian;
  int T;
  T = 1;
  // cin >> T;
  while (T--)
    solve();
  return 0;
}

C - SG Coin

题意:就是给你一个字符串的哈希值,以及一个计算字符串哈希值得函数,让你再构造两个串,可以满足这个函数,且其哈希值末尾有7个0

思路:我们根据其公式得知,我们得到其哈希值,要知道其牌号,和交易字符串,而这两个我们都不知道,那么我们其实可以只有构造一个交易字符串,在不加牌号得情况下求出其暂时的哈希值(mod1e9的意义下),但是我们还是不知道其牌号,其实这时候牌号就等于其变为后七位变为0减去其目前暂时哈希值(应为最终哈希值要后7位为0),这个操作可以通过令(x/1e7+1)*1e7得到后7位全为0得情况,减去x即为牌号,下一个构造同理

#include <bits/stdc++.h>
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl "\n"
#define lowbit(x) x & (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 18446, P = 13331;
const double eps = 1e-8;
int n;
string s1, s2, ans1, ans2;
int H(int last, string s)
{
  int v = last;
  for (int i = 0; i < s.length(); i++)
  {
    v = (v * 31 + s[i]) % 1000000007;
  }
  return (v * 7 ) % 1000000007;
}
void solve()
{
  s1 = "charlie-pays-to-eve-9-sg-coins";
  s2 = "icpc-sg-2018-at-nus";
  cin >> n;
  int x1 = H(n, s1);
  int g = ((int)(x1 / 1e7) + 1) * 1e7;
  cout << s1 << ' ';
  cout << g - x1 << endl;

  int x2 = H(g, s2);
  g = ((int)(x2 / 1e7) + 1) * 1e7;
  cout << s2 << ' ';
  cout << g - x2 << endl;
}
signed main()
{
  Ysanqian;
  int T;
  T = 1;
  // cin >> T;
  while (T--)
    solve();
  return 0;
}

L - Non-Prime Factors

题意:n次询问,每次询问给出一个x,求x得约数里有多少个不是质因数

思路:看到这个数据量,跑不了是预处理了,但是我们预处理所有得质因数,没次分解约数(根号n)的复杂度我们也接受不了,既然我们用筛法来求质因数了,不难想到用同一思想来与预处理答案

对于任意一个整数,它必定可以被拆成两个整数的乘积。所以我们可以枚举因数,然后把2~2e6的数的结果在n\log n时间复杂度内计算出来

#include <bits/stdc++.h>
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl "\n"
#define lowbit(x) x & (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 2e6 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 18446, P = 13331;
const double eps = 1e-8;
int n, m, cnt;
int ans[N], prime[N];
bool st[N], p[N];
void is_prime()
{
  st[1] = 1;
  for (int i = 2; i <= N; i++)
  {
    if (!st[i])
      prime[cnt++] = i;
    for (int j = 0; prime[j] <= N / i; j++)
    {
      st[i * prime[j]] = 1;
      if (i % prime[j] == 0)
        break;
    }
  }
  for (int i = 1; i <= 2e6; i++)
  {
    if (!st[i])
      continue;
    for (int j = i; j <= 2e6; j += i) // 每个数都有其较小的约数线性筛出来
    {
      ans[j]++;
    }
  }
}
void solve()
{
  cin >> n;
  cout << ans[n] << endl;
}
signed main()
{
  Ysanqian;
  int T;
  T = 1;
  is_prime();
  cin >> T;
  while (T--)
    solve();
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day60

文章目录 Day60 柱状图中最大的矩形题目思路代码 Day60 柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图…

Learning Rich Features for Image Manipulation Detection阅读笔记

文章目录 Abstract3.3. 双线性池 Abstract 图像篡改检测与传统的语义目标检测&#xff08;semantic object detection&#xff09;不同&#xff0c;因为它更关注篡改伪影&#xff08;tampering artifacts&#xff09;而不是图像内容&#xff0c;这表明需要学习更丰富的特征。我…

【Java】异常处理 之 Java的异常

Java的异常 在计算机程序运行的过程中&#xff0c;总是会出现各种各样的错误。 有一些错误是用户造成的&#xff0c;比如&#xff0c;希望用户输入一个int类型的年龄&#xff0c;但是用户的输入是abc&#xff1a; // 假设用户输入了abc&#xff1a; String s "abc&quo…

UNIX网络编程卷一 学习笔记 第二十七章 IP选项

IPv4允许在20字节的首部固定部分后跟最多共40字节的选项。尽管已经定义了10种IPv4选项&#xff0c;但最常用的是源路径选项。我们可通过存取IP_OPTIONS套接字选项访问这些选项&#xff0c;我们存取该套接字选项时&#xff0c;所用的缓冲区中的值就是它们置于IP数据报中的格式。…

南京https证书中的通配符https证书

随着互联网的快速发展&#xff0c;越来越多的网站开始使用HTTPS协议来保证用户的信息安全和隐私。而HTTPS协议的实现离不开HTTPS证书的支持。HTTPS证书是一种数字证书&#xff0c;用于验证网站的身份并加密数据传输。它通过使用公钥加密技术&#xff0c;确保用户与网站之间的通…

Spotfire相关

文章目录 基础架构服务器基础状态管理服务状态查看overviewserver diagnostic&#xff1a;instance 服务器启停 server配置资源池配置 基础架构 SPF DB 存储&#xff1a;用户权限信息、schedule信息、配置信息、建立的dxp文件 服务器基础状态管理 服务状态查看 overview serv…

C++ 指针函数和函数指针

除了void类型的函数之外&#xff0c;函数在调用结束之后都要有返回值&#xff0c;指针也可以是函数的返回值。当一个函数的返回值是指针类型时&#xff0c;这个函数就是指针型函数。 使用指针型函数的最主要目的就是要在函数结束时把大量的数据从被调函数返回到主调函数中。而通…

判断是否在当前页面事件方法

页面可见性 页面可见性介绍 长期以来我们一直缺少一个判断用户是否正在浏览某个指定标签页的方法。用户是否去看别的网站了&#xff1f;他们切换回来了吗&#xff1f;现在html5里页面可见性接口就提供给了程序员一个方法&#xff0c;让他们使用visibilitychange页面事件来判断…

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

财报解读:上半年仍在亏损,百济神州烧钱狂飙还能坚持多久?

2023年上半年对于创新药新秀百济神州而言&#xff0c;显然是喜忧参半的。 年初1月份&#xff0c;凭借在与美国本土巨头药品PK中的优秀表现&#xff0c;百济神州拳头产品获得了美国药监局批准&#xff0c;得以覆盖更多的适应症&#xff0c;由此引爆销售增长&#xff1b;而年中6…

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析 一、代码展示 clear all npoint100;%在分位数超空间中要采样的点数(计算次数iternpoint*(nfac1) nfac20;%研究函数的不确定因素数量 [mu, order] morris_sa1((x)test_function(x), nfac, npoint)for t1:size…

剑指offer56-I.数组中数字出现的次数

这道题我知道要用位运算&#xff0c;想了一下没头绪就直接看题解了&#xff0c;就是所有元素进行异或操作&#xff0c;对于两个操作数的每一位&#xff0c;相同结果为0&#xff0c;不同结果为1&#xff0c;在计算过程中&#xff0c;成对出现的数字的所有位会凉凉抵消为0&#x…

备份容灾哪家好怎么样

数字化时代&#xff0c;数据安全是我们不容忽视的问题。云呐容灾备份系统不仅提供了强大的数据保护功能&#xff0c;而且操作简单&#xff0c;使用方便。无论你是企业管理员&#xff0c;还是个人用户&#xff0c;都可以轻松上手。它还提供了丰富的报告和监控功能&#xff0c;让…

尚品汇总结九:RabbitMQ在项目的应用(面试专用)

项目中的问题 1.搜索与商品服务的问题 商品服务修改了 商品的上架状态,商品就可以被搜索到.采用消息通知,商品服务修改完商品上架状态,发送消息 给 搜索服务,搜索服务消费消息,进行商品数据ES保存.下架也是一样. 2.订单服务取消订单问题 延迟队里 保存订单之后 开始计时,…

每日一题——最小花费爬楼梯

题目 给定一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第i 个台阶向上爬需要支付的费用&#xff0c;下标从0开始。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的…

【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值

上一篇博客介绍了GRNN-GA&#xff1a;GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值&#xff0c;神经网络用的是RBF神经网络&#xff0c;RBF神经网络和GRNN神经网络有相似之处。本篇博客将GRNN神经网络替换成RBF神经网络&#xff0c;希望能帮助大家快速入门R…

推荐5本软件测试人员必读经典书籍

学会选择对的学习方法 俗话说&#xff1a;“选择大于努力”。 初学软件测试也如此。很多刚入行测试的同学最容易陷入一个误区&#xff0c;那就是优先买一堆视频来学习。结果时间过去了&#xff0c;视频仅以形式主义存在电脑的硬盘里&#xff0c;从此走上了入门到放弃之路。 …

第1章:绪论

科学、技术、工程、应用 科学&#xff1a;是什么、为什么技术&#xff1a;怎么做工程&#xff1a;怎样做的多快好省应用&#xff1a;怎么使用 定义 机器学习&#xff1a;利用经验改善系统自身的性能。 研究 智能数据分析&#xff08;数据分析算法&#xff09; 典型的机器…

Q-Tester 3.8:适用于开发、生产和售后的诊断测试软件

Q-Tester是一款简易使用的诊断测试软件&#xff0c;同时也是一款基于ODX&#xff08;ASAM MCD-2D/ISO 22901-1&#xff09;国际标准的工程诊断仪&#xff0c;通过该诊断仪可实现与ECU控制之间的数据交互。这一方案的优势是&#xff0c;在功能方面确定并完成相关开发工作后&…

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍(短期预测)

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍&#xff08;短期预测&#xff09; 往期第13期已实现多输入单输出滑动窗口回归预测 多输入单输出滑动窗口回归预测 往期第54期已实现多输入多输出滑动窗口回归预测 多输入多输出滑动窗口回归预测 一…