移动端 Banners
P2011 - 计算电压 题解
887 字
4 分钟
P2011 - 计算电压 题解
Done
您已获得最佳的阅读体验!
题目地址:P2011
题目难度:省选/NOI-
现给定一个电阻网络,已知其中每条边上的电阻,和若干个点和负极之间的电压(电源电压不变) ,现在求任意两点之间的电压。
对于
的数据, , , , 。
要解决这道题,我们首先要明白一个定理,即
Quote
电路中任意一个节点上,在任何时刻,流入这个节点的电流之和等于流出这个节点的电流之和。
于是我们把每一个接线柱分开来看。假如当前在讨论接线柱
发现此时又要求每个电阻丝的电压,非常的麻烦。根据高中知识可得,导体两端的电压其实就等于它两端的电势之差,假如电阻丝
发现最后的这个方程式可以使用高斯消元来解决,在系数矩阵中分别填入
#include <bits/stdc++.h>
#define N 210using namespace std;
typedef pair<int, double> PID;
const double EPS = 1e-12;
vector<PID> G[N];
double matrix[N][N];double voltage[N];double start[N];
int gauss(int n) { int rank = 0; for (int c = 0, r = 0; c <= n; c++) { int t = r; for (int i = r; i <= n; i++) { if (abs(matrix[i][c]) > abs(matrix[t][c])) t = i; } if (abs(matrix[t][c]) < EPS) continue; if (t ^ r) swap(matrix[t], matrix[r]); for (int i = n + 1; i >= c; i--) matrix[r][i] /= matrix[r][c]; for (int i = 0; i <= n; i++) { if (abs(matrix[i][c]) > EPS && i ^ r) { for (int j = n + 1; j >= c; j--) { matrix[i][j] -= matrix[i][c] * matrix[r][j]; } } } r++; rank++; } for (int i = 0; i <= n; i++) voltage[i] = matrix[i][n + 1]; return 2;}
void out(int n) { cerr << "------------------" << endl; for (int i = 0; i <= n; i++) { for (int j = 0; j <= n + 1; j++) { cerr << fixed << setprecision(2) << setw(10) << matrix[i][j]; } cerr << endl; } cerr << "------------------" << endl;}
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int n, m, k, q; cin >> n >> m >> k >> q; while (k--) { int u; cin >> u >> start[u]; } while (m--) { int u, v; double w; cin >> u >> v >> w; G[u].emplace_back(v, w); G[v].emplace_back(u, w); } matrix[0][0] = 1.0; for (int i = 1; i <= n; i++) { double sum = 0.0; if (abs(start[i]) > EPS) { matrix[i][i] = 1.0; matrix[i][n + 1] = start[i]; continue; } for (auto p: G[i]) { int u = p.first; matrix[i][u] += 1.0 / p.second; sum += 1.0 / p.second; } matrix[i][i] = -sum; } gauss(n); while (q--) { int u, v; cin >> u >> v; cout << fixed << setprecision(2) << voltage[u] - voltage[v] << endl; } return 0;}说句闲话:第一学月物理考试彻底炸了……诺贝尔物理学奖颁给了机器学习……我在这里写信息学物理题题解……
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
P2011 - 计算电压 题解
https://justpureh2o.cn/articles/2011/ 相关文章 智能推荐
1
P10503 - 233 Matrix 题解
题解 2024-09-01
2
P6126 [JSOI2012] - 始祖鸟 题解
题解 2024-10-07
3
P3429 [POI2005] DWA - Two Parties 题解
题解 2024-10-07
4
线性代数 高斯消元
oi算法 2024-10-06
5
OI算法——矩阵加速递推
oi算法 2024-03-13
随机文章 随机推荐