#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<queue> #include<vector> #include<cstring> usingnamespace std; constint N = 5e5 + 10; structedges { int to, w, next; }edge[N]; int idx = 0; int head[N]; inlinevoidadd(int from, int to, int w) { edge[++idx].w = w; edge[idx].to = to; edge[idx].next = head[from]; head[from] = idx; }
structPolar { int dist, id; Polar(int dist, int id) : dist(dist), id(id) {}; }; structcmp { booloperator()(Polar a, Polar b) { return a.dist > b.dist; } }; priority_queue<Polar, vector<Polar>, cmp> q; longlong dis[N]; int vis[N]; voiddijkstra(int s) { dis[s] = 0; q.push(Polar(0, s)); while (!q.empty()) { int p = q.top().id; q.pop(); if (vis[p]) continue; vis[p] = 1; for (int e = head[p]; e != 0; e = edge[e].next) { int to = edge[e].to, w = edge[e].w;
dis[to] = min(dis[to], dis[p] + w); if (!vis[to]) q.push(Polar(dis[to], to)); } } } intmain() { int n, m, s; cin >> n >> m >> s; for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; add(u, v, w); } for (int i = 1; i <= n; i++)dis[i] = 0x7fffffff; dijkstra(s); for (int i = 1; i <= n; i++) { cout << dis[i] << " "; } }
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> #include<queue> constint N = 100010; usingnamespace std; structedges { int to, w, next; }; edges edge[N]; int idx, head[N]; voidadd(int from, int to, int w) { edge[++idx].to = to; edge[idx].w = w; edge[idx].next = head[from]; head[from] = idx; } int dist[N]; int n, m; voidspfa(int s) { int inq[N] = { 0 };
while (!q.empty()) { int p = q.front(); q.pop(); inq[p] = 0; for (int e = head[p]; e; e = edge[e].next) { int to = edge[e].to; if (dist[to] > dist[p] + edge[e].w) { dist[to] = dist[p] + edge[e].w; if (!inq[to]) { inqc[to]++; if (inqc[to] >= n) { puts("YES"); return ; } inq[to] = 1; q.push(to); } } } } puts("NO"); return; } intmain() { int T = 0; cin >> T; while (T--) {
cin >> n >> m; idx = 0; memset(head, 0, sizeof(head)); memset(dist, 0x3f3f3f3f, sizeof(dist)); for (int i = 0; i <= n; i++) { edge[i].to = 0; edge[i].next = 0; } for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; add(u, v, w); if (w >= 0)add(v, u, w); } spfa(1); } }
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<queue> #include<cstring> usingnamespace std; int n, m; structedges { int v, w, next; }edge[10005]; int idx = 0; int head[5005]; inlinevoidadd(int u, int v, int w) { edge[++idx].v = v; edge[idx].w = w; edge[idx].next = head[u]; head[u] = idx; } int vis[5005], tot[5005]; int dis[5005]; boolspfa(int s) { queue<int>q; memset(dis, 0x3f3f3f3f, sizeof(dis));
vis[s] = 1; dis[s] = 0; q.push(s);
while (!q.empty()) { int p = q.front(); q.pop(); vis[p] = 0; for (int e = head[p]; e; e = edge[e].next) { int to = edge[e].v, w = edge[e].w; if (dis[to] > dis[p] + w) { dis[to] = dis[p] + w; if (!vis[to]) {
vis[to] = 1; tot[to]++; if (tot[to] == n + 1) { returnfalse; } q.push(to); } }
} } returntrue; }
intmain() { cin >> n >> m; for (int i = 1; i <= n; i++) add(0, i, 0); for (int i = 1; i <= m; i++) { int a, b, c; cin >> a >> b >> c; add(a, b, c); } if (!spfa(0))cout << "NO" << endl; else for (int i = 1; i <= n; i++) cout << dis[i] << ' ';
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<cstring> #include<queue> usingnamespace std; int n, m; constint N = 1e6 + 7; vector<int>g[N]; int deg[N], cnt[N], vis[N]; voidbfs() { queue<int>q; q.push(1); cnt[1] = 1; deg[1] = 0; vis[1] = 1; while (!q.empty()) { int p = q.front(); q.pop(); for (auto e : g[p]) { if (!vis[e]) { vis[e] = 1; q.push(e); deg[e] = deg[p] + 1; } if (deg[e] == deg[p] + 1) cnt[e] = (cnt[e] + cnt[p]) % 100003;
} } for (int i = 1; i <= n; i++) cout << cnt[i] << endl; } intmain() { cin >> n >> m; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); }
#define _CRT_SECURE_NO_WARNINGS #include<bits/stdc++.h> usingnamespace std; int n, m, b; constint N = 1e5 + 7; int f[N]; structedges { int to, w, next; }edge[N]; int idx, head[N]; inlinevoidadd(int from, int to, int w) { edge[++idx].w = w; edge[idx].to = to; edge[idx].next = head[from]; head[from] = idx; } structPolar { int id, dis; Polar(int dis, int id) :dis(dis), id(id) {} }; structcmp { booloperator()(Polar a, Polar b) { return a.dis > b.dis; } }; int dis[N]; int vis[N]; booldij(int mid) { memset(dis, 0x3f3f3f3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); priority_queue<Polar, vector<Polar>, cmp>q; q.push({ 0, 1 }); dis[1] = 0; if (f[1] > mid)returnfalse; while (!q.empty()) { int p = q.top().id; q.pop(); if (vis[p])continue; vis[p] = 1; for (int e = head[p]; e; e = edge[e].next) { int to = edge[e].to; if (f[to] > mid)continue; if (dis[to] > dis[p] + edge[e].w) { dis[to] = dis[p] + edge[e].w; q.push({ dis[to], to }); } } } if (dis[n] > b)returnfalse; elsereturntrue; }
intmain() { cin >> n >> m >> b; int l = 0, r = 0; for (int i = 1; i <= n; i++) { cin >> f[i]; r = max(f[i], r); } for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; add(u, v, w); add(v, u, w); } if (!dij(INT_MAX)) { cout << "AFK" << endl; return0; } while (l < r) { int mid = (l + r) >> 1; if (dij(mid)) { r = mid; } else { l = mid + 1; } } cout << l << endl; }
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> usingnamespace std; int f[110][110]; int g[110][110]; intmain() { int n, m; cin >> n >> m; memset(f, 0x3f3f3f3f, sizeof(f)); for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; f[u][v] = f[v][u] = w; } for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { f[i][j] = min(f[i][j], f[i][k] + f[k][j]); g[i][j] = f[i][j]; } } }
int ans = 2e9 + 7; for (int l = 1; l <= n; l++) { for (int b = 1; b < l; b++) {
g[l][b] = g[b][l] = 0; // 关键优化步骤 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { g[i][j] = min(g[i][j], g[i][l] + g[l][j]); } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { g[i][j] = min(g[i][j], g[i][b] + g[b][j]); } } int ret = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { ret += g[i][j]; } } ans = min(ans, ret); memcpy(g, f, sizeof(f)); } } cout << ans; }
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<queue> #include<cstring> usingnamespace std; constint N = 6e5 + 10; int mon[N]; vector<int>G[N]; vector<int>rg[N]; bool vis[N]; int maxn[N], minn[N];
voidbfs1(int u) { queue<int>q; q.push(u); while (!q.empty()) { int p = q.front(); q.pop(); for (auto v : G[p]) { if (!vis[v]) { q.push(v); vis[v] = 1;
} minn[v] = min(minn[p], mon[v]); } } } voidbfs2(int u) { queue<int>q; q.push(u); while (!q.empty()) { int p = q.front(); q.pop(); for (auto v : rg[p]) { if (!vis[v]) { q.push(v); vis[v] = 1;
} maxn[v] = max(maxn[p], mon[v]); } } }
intmain() { int n, m; int ret = 0; cin >> n >> m; memset(maxn, -1, sizeof(maxn)); memset(minn, 10, sizeof(minn)); for (int i = 1; i <= n; i++) { cin >> mon[i]; } for (int i = 0; i < m; i++) { int u, v, t; cin >> u >> v >> t; rg[v].push_back(u); G[u].push_back(v);
if (t > 1) { G[v].push_back(u); rg[u].push_back(v); } } minn[1] = maxn[1] = mon[1]; maxn[n] = minn[n] = mon[n]; bfs1(1); memset(vis, 0, sizeof(vis)); bfs2(n); for (int i = 1; i <= n; i++) { //cout << minn[i] << " " << maxn[i] << endl; ret = max(ret, maxn[i] - minn[i]); } cout << ret << endl; return0; }