链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1749

题解

这题有点问题,它没给出mmm的范围,实际上我用随机数据测试的时候,当m=30m=30m=30时答案就会爆longlonglong\ longlong long,所以就让人犹豫需不需要写高精度
最后发现我wawawa的原因竟然是数组开小了qwq,并不是爆longlonglong\ longlong long的问题
其实就是用节点点位法,就用大学《电路分析》里学的方法设出每个点的电势,然后列KCLKCLKCL就好了。我可以在ABABAB两端加一个理想电流源,电流为1A1A1A,最后算出来ABABAB两点之间的电势差在数值上就等于等效电阻
连通性的判断可以直接用并查集

代码

//高斯消元
#include <bits/stdc++.h>
#define maxn 20
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
ll read(ll x=0)
{ll c, f=1;for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;for(;isdigit(c);c=getchar())x=x*10+c-48;return f*x;
}
class fraction
{private:ll a, b;public:fraction(ll a, ll b):a(a),b(b){}fraction():a(0),b(1){}fraction simplify(){ll g = abs(__gcd(a,b));a/=g , b/=g;return *this;}fraction operator+(fraction t){return fraction(a*t.b+b*t.a,b*t.b).simplify();}fraction operator-(){return fraction(-a,b);}fraction operator-(fraction t){return (*this+(-t)).simplify();}fraction operator*(fraction t){return fraction(a*t.a,b*t.b).simplify();}fraction inv(){fraction t = fraction(b,a);if(t.b<0)t.a=-t.a, t.b=-t.b;return t;}fraction operator/(fraction t){return ((*this)*t.inv()).simplify();}bool operator<(fraction t){fraction tmp = *this-t;return tmp.a<0;}bool operator>(fraction t){fraction tmp = *this-t;return tmp.a>0;}bool operator==(fraction t){fraction tmp = *this-t;return tmp.a==0;}bool operator!=(fraction t){return !(operator==(t));}void print(){simplify();printf("%lld/%lld",a,b);}fraction operator+=(fraction t){*this = *this + t;return *this;}fraction operator-=(fraction t){*this = *this - t;return *this;}
};
class matrix
{public:ll n, m;fraction a[maxn][maxn];fraction* operator[](ll index){return a[index];}matrix(ll n, ll m):n(n),m(m){}void gauss(){ll i, j, k, r;for(i=1;i<=n;i++){r=i;for(j=i+1;j<=n;j++)if(a[j][i]!=fraction(0,1))r=j;if(a[r][i]==fraction(0,1))continue;for(j=1;j<=n+1;j++)swap(a[r][j],a[i][j]);for(j=1;j<=n;j++)if(j!=i)for(k=n+1;k>=i;k--)a[j][k] -= a[j][i]/a[i][i]*a[i][k];}}fraction get_value(ll index){return a[index][n+1]/a[index][index];}void show(){for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++)a[i][j].print(), putchar(j==m?10:32);}}
};
class MFS   //Merging and Finding Set
{private:ll f[maxn], size;public:MFS(ll n):size(n){for(ll i=1;i<=n;i++)f[i]=i;}ll find(ll x){return x==f[x]?x:f[x]=find(f[x]);}void merge(ll x, ll y){f[find(x)]=find(y);}
};
ll N, M, Q, u[100010], v[100010], R[100010];
fraction G[100010];
fraction solve(int A, int B)
{matrix mat(N,N+1);ll i;for(i=1;i<=M;i++){mat[u[i]][u[i]] += G[i];mat[v[i]][v[i]] += G[i];mat[u[i]][v[i]] -= G[i];mat[v[i]][u[i]] -= G[i];}mat[A][N+1] = fraction(1,1);for(i=1;i<=N+1;i++)mat[B][i]=fraction(0,1);mat[B][B]=fraction(1,1);mat.gauss();return mat.get_value(A)-mat.get_value(B);
}
int main()
{ll T, i, j, kase=0, A, B;fraction ans;T=read();while(T--){cl(R);N=read(), M=read();MFS s(N);for(i=1;i<=M;i++){u[i]=read()+1, v[i]=read()+1, R[i]=read(), G[i]=fraction(1,R[i]);s.merge(u[i],v[i]);}printf("Case #%lld:\n",++kase);Q=read();while(Q--){A=read()+1, B=read()+1;if(s.find(A)!=s.find(B)){printf("Resistance between %lld and %lld is 1/0\n",A-1,B-1);continue;}ans=solve(A,B);printf("Resistance between %lld and %lld is ",A-1,B-1);ans.print();putchar(10);}putchar(10);}return 0;
}

uva10808 - Rational Resistors相关推荐

  1. uva 10808 - Rational Resistors

    uva  10808 - Rational Resistors 题意:给出一个纯电阻网络,求任意两点间的等效电阻 , 输出分数形式. 看似简单的电路题用程序实现起来却非常棘手,首先得自己定义分数的各种 ...

  2. 《算法入门经典大赛——培训指南》第二章考试

    UVa特别考试 UVa站点专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...

  3. Codeforces Round #200 (Div. 1)A. Rational Resistance 数学

    A. Rational Resistance Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343 ...

  4. Rational Rose打开方式

    Rational Rose打开方式 rational Rose出现打不开的情况,可以在我的电脑中c盘目录下搜索flexlm.cpl 打开后的界面 点击Setup,查看并检查修改配置是否正确 检查完毕后 ...

  5. 参加IBM Rational高峰论坛的会议笔记

    1.      制定项目开发流程(项目开发的第一步) 1.1. 为什么制定项目开发流程? 在我们印象中,每个公司的开发流程不经一致,其次在每个公司的内部,一个稳定的开发团队,其开发流程是也不是一致. ...

  6. IBM Rational DOORS通过DXL进行二次开发初试(2)

    2019独角兽企业重金招聘Python工程师标准>>> 1.如果是在Module模块菜单添加功能只需要在:C:\Program Files(x86)\IBM\Rational\DOO ...

  7. 【 MATLAB 】Rational Transfer Function(有理传递函数)

    这算是学习MATLAB中的函数filter需要提前知道的理论基础知识,如果学过数字信号处理一定不会陌生,甚至能信手拈来. 其实英文版已经能看了,如果觉得不方便,那么最后也给出中文版. 英文版: Rat ...

  8. IBM RSA(Rational Software Architect)试用版下载地址

    通过下面地址可以下载各个版本的IBM RSA(Rational Software Architect)试用版: http://www14.software.ibm.com/webapp/downloa ...

  9. multiple Rational objects

    2019独角兽企业重金招聘Python工程师标准>>> //Driver to exercise the use of multiple Rational objects publi ...

最新文章

  1. 关于邮件服务器的原理
  2. Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
  3. go二维map_mirrorlang——从0设计二维内存寻址语言及vm(五.内存管理的思考)
  4. EOS 共识机制 (3)DPOS+BFT
  5. Linux环境下Android开发环境的搭建
  6. Learn Python—表达式、数据类型、流程控制
  7. var和function谁先优先执行_变量var声明和函数function声明优先级
  8. 等式变换java解法
  9. Ionic Cordova 环境配置window
  10. 【实践】多模态内容理解技术在腾讯搜索中的应用及实践.pdf(附下载链接)
  11. Rails secret token bug
  12. vue 中样式的绑定
  13. kodi pvr 不能安装_Kodi添加m3u8直播源教程 使用PVR IPTV Simple Client看电视直播
  14. ADS1256实现轮询
  15. 实现页面的图文混排布局(Web作业)
  16. Python函数嵌套/递归(七)-----详细
  17. 我为什么不挣钱也要写公众号
  18. 白光干涉仪压电陶瓷的大作用 | 科普篇
  19. 百度快速收录技巧总结
  20. 张勋说:棒磨机断棒的几个可能原因

热门文章

  1. 迪文工控触摸屏使用modbus功能
  2. ubuntu系统命令之关机、注销、重启
  3. 程序员初创公司的合伙人股权的进入和退出机制设计-20151020
  4. 【银河麒麟V10】【服务器】搭建本地镜像源
  5. matlab中size函数使用
  6. 计算机网络中的五层协议的体系结构
  7. [Unity3D]-协程的介绍和使用
  8. webgl 第三人称相机
  9. 计算机科学与技术有关参考文献,计算机科学与技术毕业论文参考文献示例
  10. Cross-validation: evaluating estimator performance