首页 > 其他分享 >秘制小模板

秘制小模板

时间:2024-10-18 14:33:51浏览次数:6  
标签:int kMaxN bool push include 秘制 模板 dis

最小生成树

Prim

Code
#include <iostream>
#include <queue>

using namespace std;

const int kMaxN = 1e5 + 1;

int n, m;
vector<pair<int, int>> g[kMaxN];
struct Node {
  int u, w;
  Node (int a, int b) {
    u = a, w = b;
  }
  friend bool operator<(Node a, Node b) {
    return a.w > b.w;
  }
};

auto Prim() {
  priority_queue<Node> q;
  int dis[kMaxN] = {};
  fill(dis + 1, dis + n + 1, 1e9), dis[1] = 0;
  bool f[kMaxN] = {};
  q.push(Node(1, 0));
  while (!q.empty()) {
    Node t = q.top();
    q.pop();
    if (f[t.u]) {
      continue;
    }
    f[t.u] = 1;
    for (pair<int, int> i : g[t.u]) {
      if (dis[i.first] > i.second && !f[i.first]) {
        dis[i.first] = i.second;
        q.push(Node(i.first, dis[i.first]));
      }
    }
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    if (!f[i]) {
      return (string)"orz";
    }
    ans += dis[i];
  }
  return to_string(ans);
}

int main() {
  cin >> n >> m;
  for (int i = 1, u, v, w; i <= m; i++) {
    cin >> u >> v >> w;
    g[u].push_back({v, w}), g[v].push_back({u, w});
  }
  cout << Prim();
  return 0;
}

Kruskal

Code
#include <iostream>
#include <algorithm>

using namespace std;

const int kMaxN = 2e5 + 1;

struct S{
  int u, v, w;
  friend bool operator <(S a, S b) {
    return a.w < b.w;
  }
  friend istream &operator>>(istream &in, S &a) {
    in >> a.u >> a.v >> a.w;
    return in;
  }
} side[kMaxN];
int n, m, f[kMaxN], ans, c;
int find(int x) {
  return f[x] = f[x] == x ? x : find(f[x]);
}

int main() {
  cin >> n >> m;
  for (int i = 1 ; i <= n; i++) {
    f[i] = i;
  }
  for (int i = 1; i <= m; i++) {
    cin >> side[i];
  }
  sort(side + 1, side + m + 1);
  for (int i = 1; i <= m; i++) {
    if (c == n - 1) {
      break;
    }
    if (find(side[i].u) != find(side[i].v)) {
      c++;
      f[f[side[i].v]] = f[side[i].u];
      find(side[i].v);
      ans += side[i].w;
    }
  }
  cout << (c == n - 1 ? to_string(ans) : "orz");
  return 0;
}

最短路

Dijkstra

Code
#include <iostream>
#include <queue>

using namespace std;
using ll = long long;

const int kMaxN = 1e5 + 1;

int n, m, s, u, v, w, a[kMaxN], dis[kMaxN];
struct node {
  int u, w;
  bool operator<(const node& a) const {
    return w > a.w;
  }
};
vector<node> g[kMaxN];

void D() {
  priority_queue<node> q;
  bool f[kMaxN] = {};
  q.push({s, 0});
  dis[s] = 0;
  while (!q.empty()) {
    int t = q.top().u;
    q.pop();
    if (f[t]) {
      continue;
    }
    f[t] = 1;
    for (auto i : g[t]) {
      if (dis[t] + i.w < dis[i.u]) {
        dis[i.u] = dis[t] + i.w;
        q.push({i.u, dis[i.u]});
      }
    }
  }
}

int main() {
  cin >> n >> m >> s;
  fill(dis + 1, dis + n + 1, 1e9);
  for (int i = 1; i <= m; i++) {
    cin >> u >> v >> w;
    g[u].push_back({v, w});
  }
  D();
  for (int i = 1; i <= n; i++) {
    cout << dis[i] << " ";
  }
  return 0;
}

SPFA(负环)

Code
#include <bits/stdc++.h>

using namespace std;

const int KMaxN = 1e5 + 1;

bool flag;
int sum = 0;
int n, m, s, u, v, w, dis[KMaxN];
struct node {
  int u, w;
  bool operator<(const node& a) const {
    return w > a.w;
  }
};
vector<node> g[KMaxN];

void S() {
  queue<int> q;
  bool f[KMaxN] = {};
  int v[KMaxN] = {};
  q.push(1);
  dis[1] = 0;
  while (!q.empty()) {
    int t = q.front();
    q.pop();
    f[t] = 0;
    for (auto i : g[t]) {
      if (dis[t] + i.w < dis[i.u]) {
        dis[i.u] = dis[t] + i.w;
        if (!f[i.u]) {
          v[t]++;
          if (v[t] > 2 * m) {
            flag = 0;
            return;
          }
          f[i.u] = 1;
          q.push(i.u);
        }
      }
    }
  }
}

int main() {
  int t;
  for (cin >> t; t; t--) {
    for (int i = 1; i <= n; i++) {
      g[i].clear();
      flag = 1;
    }
    cin >> n >> m;
    fill(dis + 1, dis + n + 1, INT_MAX);
    for (int i = 1; i <= m; i++) {
      cin >> u >> v >> w;
      g[u].push_back({v, w});
      if (w >= 0) {
        g[v].push_back({u, w});
      }
    }
    flag = 1;
    S();
    cout << (flag == 0 ? "YES\n" : "NO\n");
  }
  return 0;
}

标签:int,kMaxN,bool,push,include,秘制,模板,dis
From: https://www.cnblogs.com/GenesisCrystal/p/18474241

相关文章

  • 【模板】模意义下的乘法逆元 2
    原题链接\(通过小学就知道的小费马定理我们可以得知\)\(inv(a)=a^(mod-2)(modp)\)\(我们将其前后通分然后把分子的和加起来最后通过所有数的乘积的逆元进行计算即可\)\(唯一恶心的点就是卡取消同步流\)\(code:\)点击查看代码#include<bits/stdc++.h>#defineintlong......
  • Zabbix模板数据存储在哪里?
    Zabbix的模板数据存储在数据库的哪一个表里面?以MySQL数据库为例,在数据库zabbix中,其实模板数据存储在hosts这个表里面,而不是存在hosts_templates表里面。很多人一看到templates关键字,容易先入为主的以为这个表会存储模板的相关数据。但是实际上,hosts_templates表用于存储主机和模板......
  • 网站如何修改后台代码?模板网站怎么修改?
    修改网站后台代码通常涉及以下几个步骤,具体操作可能会因网站的技术栈和架构而有所不同。以下是一般流程:1.备份现有代码重要:在进行任何修改之前,务必备份现有的代码和数据库。这可以在出现问题时帮助你快速恢复。2.确定修改需求明确你需要对后台代码进行哪些具体的修改,比如......
  • 网站后台怎么修改模板?
    要修改网站后台的模板,通常需要遵循以下步骤。具体步骤可能会根据您使用的CMS(内容管理系统)或框架有所不同,但大体流程相似:登录后台管理界面:使用您的管理员账号登录到网站的后台管理界面。找到模板管理选项:在后台菜单中查找与“模板”、“主题”或“外观”相关的选项。这......
  • 模板网站可以修改内容吗?网站修改资料页面模板?
    模板网站通常提供了多种方式让用户自定义和修改内容,具体方法取决于所使用的模板平台或工具。以下是几种常见的修改方式:文本编辑:大多数模板网站允许用户直接在页面上编辑文本内容,如标题、段落等。图片更换:用户可以通过上传自己的图片来替换模板中的默认图片。颜色调整:一些高级......
  • 2024 CSP-J/S2 模板复习计划
    2024CSP-J/S2模板复习计划(Starton2024-10-18)说明原来这个计划是2023CSP-J/S2模板复习,现在被拿来当模板集。Day1我的记录@zhenghanyun的记录任务已完成SPFA(不带负环)已完成Floyd已完成Dijkstra已完成拓扑排序已完成单调栈已......
  • 模板网站如何修改代码?修改织梦网站页面模板?
    修改模板网站的代码通常涉及以下几个步骤:备份原始文件:在开始任何修改之前,确保备份原始文件。这可以帮助您在遇到问题时恢复到初始状态。了解文件结构:浏览模板文件夹,了解其结构。常见的文件夹包括 css、js、img 和 html 文件。查看 README 或其他文档,了解模板的......
  • 如何修改网站模板?想修改公司网站界面?
    修改网站模板通常涉及以下几个步骤,具体操作可能会根据你使用的建站平台或CMS(内容管理系统)有所不同:备份当前网站:在进行任何更改之前,确保备份你的网站,以防万一出现问题可以恢复。选择编辑器或平台:确定你是在使用WordPress、Joomla、Drupal等CMS,还是静态网站生成器如Hugo......
  • 【FastAPI】jinja2模板
    本文介绍简单的jinja2语法APIimportuvicornfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.templatingimportJinja2Templatesfromfastapi.staticfilesimportStaticFilesapp=FastAPI()#项目根目录下创建static与templates文件......
  • LangGraph 源码分析 | BaseTool 模板类
    文章目录BaseTool源码分析核心属性以`TavilySearchResults(BaseTool)`为例namedescriptionargs_schemaresponse_format查询选项属性需要子类实现的抽象方法以`TavilySearchResults(BaseTool)`为例核心方法`arun()`:`run()`的异步执行版本`invoke()`和`ainvoke()`......