Electric resistance
题目
传送门 to VJ
题目概要
给你一个电路图,求 1 1 1 号节点到 n n n 号节点的总电阻是多少。
数据范围与约定
数据组数 T ≤ 100 , 1 < n ≤ 50 , 0 < T\le 100,1<n\le 50,0< T≤100,1<n≤50,0< 边的数量 m ≤ 2000 , 1 ≤ m\le 2000,1\le m≤2000,1≤ 电阻阻值 R ≤ 1 0 4 R\le 10^4 R≤104 。图是联通的简单图。
思路
众所周知,电压来源于电势差。
所以假设每个节点的电势即可。然后利用流入电流 = = = 流出电流建立方程即可。
可以规定 1 1 1 号节点的电势为 1 0 4 v 10^4\tt{v} 104v 且 n n n 号节点的电势为 0 v 0\tt{v} 0v 。
然后利用欧姆定律, R = U I R=\frac{U}{I} R=IU 即可计算。
代码
#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
bool lessThan(double a,double b){return a+1e-6 < b;
}
bool equalsTo(double a,double b){return lessThan(a,b) and lessThan(b,a);
}const int MaxN = 55;
struct Matrix{double a[MaxN][MaxN];int n, m;Matrix(){ this->clear(); }void clear(){ memset(a,0,sizeof a); }bool Gauss(){for(int i=1,cal=1; cal<m and i<=n; ++cal){int id = i; // 第i行for(int j=i+1; j<=n; ++j)if(fabs(a[id][cal]) < fabs(a[j][cal]))id = j; // 找绝对值最大的一行if(id != i) swap(a[i],a[id]);if(equalsTo(a[i][cal],0)) continue;for(int j=1; j<=n; ++j) if(i != j)for(int k=m; k>=cal; --k) // f = a[j][cal]/a[i][cal]a[j][k] -= a[i][k]*a[j][cal]/a[i][cal];for(int j=m; j>=cal; --j)a[i][j] /= a[i][cal];++ i; // 处理下一行}for(int i=m; i<=n; ++i)if(not equalsTo(a[i][m],0))return false; // 无解return true; // 有至少一个解}void paint(){for(int i=1; i<=n; ++i)for(int j=1; j<=m; ++j)printf("%f%c",a[i][j],j==m?'\n':' ');}
} mat;int resistance[MaxN][MaxN];
void work(){mat.clear(); // 进行清零memset(resistance,0,MaxN*MaxN<<2);scanf("%d %d",&mat.n,&mat.m);for(int i=1,x,y,z; i<=mat.m; ++i){scanf("%d %d %d",&x,&y,&z);resistance[x][y] = z;resistance[y][x] = z;}for(int i=2; i<mat.n; ++i)for(int j=1; j<=mat.n; ++j){if(i == j or resistance[i][j] == 0)continue;mat.a[i][j] = 1.0/resistance[i][j];mat.a[i][i] += -mat.a[i][j];}mat.m = mat.n+1; // 恰好有解的矩阵mat.a[1][1] = 1, mat.a[1][mat.m] = 10000;// 规定U1 = 10000vmat.a[mat.n][mat.n] = 1; // 规定Un = 0vmat.Gauss();double flow = 0; // 电流for(int i=2; i<=mat.n; ++i)if(resistance[1][i] != 0)flow += (mat.a[1][mat.m]-mat.a[i][mat.m])/resistance[1][i];printf("%.2f\n",(mat.a[1][mat.m]-mat.a[mat.n][mat.m])/flow);
}int main(){int T; scanf("%d",&T);for(int i=1; i<=T; ++i){printf("Case #%d: ",i);work(); // ppl or2}return 0;
}
Electric resistance相关推荐
- 大学计算机英语怎么说,大学计算机是什么意思
1. 基于X窗口的图形用户接口编辑器的设计与实现吴庆炜,蔡士杰(中国科学院计算技术研究所CAD开放实验室,北京100080)(南京大学计算机科学与技术系,南京210093)摘要本文介绍了一个用于描述. ...
- 各行业的英语术语(绝对精华3)
b]企业缩写词[/b] 5S管理 ABC : 作業制成本制度 (Activity-Based Costing) ABB : 實施作業制預算制度 (Activity-Based Budgeting) A ...
- 国家电网职称英语计算机答案,国家电网职称英语题库短文判断
<国家电网职称英语题库短文判断>由会员分享,可在线阅读,更多相关<国家电网职称英语题库短文判断(47页珍藏版)>请在人人文库网上搜索. 1.短文判断Passage 1 Feat ...
- c语言controlled变量的作用,Gate-controlled A-C switch
摘要: This new silicon switch (Fig. 1) has a high-impedance (off) state in which it blocks 200 v peak, ...
- IFC基本单位定义(basic unit declaration)
IFC基本单位定义(basic unit declaration) 单位定义是为了度量具体量的数值表示什么意义. measures和values IfcProject定义全局单位 实例一: // 基本 ...
- 数模电路基础知识 —— 0. 常见基本单位与定义
符号与单位 名称 单位 电学符号 定义 电压(Voltage) 单位伏特,记为 VVV UUU 电子元器件两端的电势差 电流(Electric Current) 单位安培,记为 AAA III 单位时 ...
- Battery electric vehicles (BEVs) 快充技术
Battery electric vehicles (BEVs) 快充技术 BEVs: Not If, But When and How Fast 电池电动汽车(bev)已经开始走上一条陡峭的部署增长 ...
- 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance
在了解intrinsicContentSize之前,我们需要先了解2个概念: AutoLayout在做什么 约束优先级是什么意思. 如果不了解这两个概念,看intinsic content size没 ...
- Codeforces Round #200 (Div. 1)A. Rational Resistance 数学
A. Rational Resistance Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343 ...
最新文章
- python中x y表示_Python中表达式x += y和x = x+y 的区别详解
- 【小项目关键技术】硬件通信三种方式、串口、IIC、SPI
- 如何控制并发和控制死锁(内含pb的处理要点)
- Mybatis(1)---入门篇单表查询
- 05-雷海林-mysql备份原理与在TDSQL中的实践
- 号称“绝对安全”的量子通信到底是什么?
- Untiy3D - 3 打飞碟小游戏
- NOIP模拟 位运算(trie树+按位贪心)
- w7设置双显示器_4K+144Hz 支持FreeSync Acer XV273K显示器评测
- Android jetpack Room数据库(一)基本使用
- 2014年值得关注的10个开源项目(下)
- oracle支持utf8字符集,AL32UTF8/UTF8(Unicode)数据库字符集含义
- gtx1660是什么级别的_GTX1660相当于什么显卡 三月显卡天梯图秒懂GTX1660性能
- 这台IPAD最适合程序员编程!!!
- 清除缓冲区的几种方法
- LMG3422R030RQZR 600V GaN晶体管LMG3425R030RQZR电路图
- iOS 打电话、发短信、写邮件、打开常用软件的几种方式
- 【Zotero高效知识管理】(4)Zotero的文献管理、阅读及笔记知识管理
- VHDL实现智能药盒
- windows系统安装Racket后使用raco指令