#include<bits/stdc++.h> usingnamespace std; constint N = 1e4 + 9, M = 2e5 + 9; int cnt, n, m, p[N], ans, a, b, w; typedefstructnode { int a, b, w; } edge; edge e[M]; boolcmp(edge x, edge y){ return x.w < y.w; } intfind(int x){ if (p[x] != x) { p[x] = find(p[x]); } return p[x]; } intmain(){ cin >> n >> m; for (int i = 0; i < m; i++) { cin >> a >> b >> w; e[i].a = a, e[i].b = b, e[i].w = w; } for (int i = 1; i <= n; i++) p[i] = i; sort(e, e + m, cmp); for (int i = 0; i < m; i++) { a = e[i].a, b = e[i].b, w = e[i].w; if (find(a) != find(b)) { p[find(a)] = find(b); ans += w; cnt++; } } if (cnt == n - 1) cout << ans; else cout << "orz"; return0; }
#include<bits/stdc++.h> usingnamespace std; int n, m; typedef pair<int, int> PII; constint N = 1e3+9; // 邻接表存图 vector<PII> g[N]; int w[N], a, b, c,dist[N]; bool vis[N];
intmain(){ cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> w[i]; } for (int i = 0; i < m; i++) { cin >> a >> b >> c; g[a].push_back({b,c+w[b]});// 从 a 去到 b 的花费还要计算在 b 被隔离的时间 g[b].push_back({a,c+w[a]}); } dijkstra(1,n); return0; }
#include<bits/stdc++.h> usingnamespace std; int n, x; constint N = 1e4 + 9; int h[N], e[N], ne[N], d[N], idx; vector<int> ans; queue<int> q; voidadd(int a, int b){ e[idx] = b, ne[idx] = h[a], d[b]++, h[a] = idx++; }
voidtp(){ for (int i = 1; i <= n; i++) { if (!d[i]) { ans.push_back(i); q.push(i); } } while (q.size()) { auto t = q.front(); q.pop(); for (int i = h[t]; i != -1; i = ne[i]) { int j = e[i]; d[j]--; if (!d[j]) { ans.push_back(j); q.push(j); } } } return ; }
intmain(){ memset(h, -1, sizeof h); scanf("%d", &n); for (int i = 1; i <= n; i++) { while (1) { scanf("%d", &x); if (!x) break; add(i, x); } } tp(); for (auto x : ans) { printf("%d ", x); } return0; }
#include<bits/stdc++.h> usingnamespace std; int n, a, b; constint N = 1e5+9; vector<int> g[N], ans; int in[N]; bool flg; // 传入只有单边的点,删除这个点 voiddel(int u){ // cout << "delete" << u << endl; in[u]--; int to = g[u][0]; in[to]--; // cout << to << " " << in[to] << " " << out[to] << endl; // 删除完之后,新的单边点出现,连锁 if (in[to] == 1)del(to); return; }
intmain(){ cin >> n; for (int i = 0; i < n; i++) { cin >> a >> b; g[a].push_back(b); g[b].push_back(a); in[a]++, in[b]++; } for (int i = 1; i <= n; i++) { // 只有一个边链接到树上的点,剪枝 if (in[i] == 1) { del(i); } } for (int i = 1; i <= n; i++) { // 所有单点剪枝后只剩下环 if (in[i])cout << i << ' '; }
#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; ll a, b, p;
ll qpow(int a, int b, int p){ ll ans = 1, tmp = a; while (b) { if (b & 1) ans = (ans % p * tmp % p) % p; tmp = (tmp % p * tmp % p) % p; b >>= 1; } return ans % p; }
intmain(){ scanf("%lld %lld %lld", &a, &b, &p); printf("%lld^%lld mod %lld=%lld", a, b, p, qpow(a, b, p)); return0; }
#include<iostream> #define int __int128 // 使用 __int128 需要手写输入输出 usingnamespace std;
constint N = 1e5 + 9;
int n, a[N], x, mp[N], yinzi[N], beishu[N], ans; // mp yinzi beishu 分别记录 x 的出现次数,因子个数,倍数个数
intread(){ int res = 0, p = 1; char c; c = getchar(); // 非数字 while (c < '0' || c > '9') { if (c == '-')p = -1; c = getchar(); } // 数字 while (c >= '0' && c <= '9') { res = res * 10 + (c - '0'); c = getchar(); } return p * res; }
set<PDD> lines; // 直线集合 double a, b, ans; intcount(double a, double b){ set<PDD> ps; // 交点集合 double x, y, c, d; // 遍历之前的直线 for (auto t : lines) { c = t.first, d = t.second; if (c == a) { // 斜率相同不会有交点,需要跳过 continue; } // 求交点 x = (d - b) / (c - a); y = a * x + b;
ps.insert({x, y}); } return ps.size(); } intmain(){ int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a >> b; // 使用集合来跳过重合的线 int cnt = lines.size(); // 先记录没插入前的集合大小 lines.insert({a, b}); // 插入这个点,set 会自动去重 if (cnt != lines.size()) { // 如果大小不同,说明插入的是新的 ans += count(a, b) + 1; // 1 来自于直线本身,还要计算交点 } } cout << ans + 1; // 原始平面也算一块 return0; }