题目链接:点击查看

题目大意:笛卡尔坐标系上给出 n 个点,如果点为 ( -1 , -1 ) 说明该点的位置是不确定的,现在给出 m 个相连接的关系, 规定位置不确定的点会被周围相邻的点拉到平均位置上,题目需要确定出最终每个点的位置

题目分析:首先不难看出,x 和 y 是相互独立的,所以我们可以单独处理,因为 n 最大只有 100 ,所以我们可以对于每个位置列出一个线性方程,最后高斯消元直接求解即可

大概就是这样的转换,套入模板即可

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=110;double a[N][N],x[N],y[N];int n,m;vector<int>node[N];bool Gauss()
{for(int i=1;i<=n;++i)//枚举列(项) {int max=i;for(int j=i+1;j<=n;++j)//选出该列最大系数 {if(fabs(a[j][i])>fabs(a[max][i]))//fabs是取浮点数的绝对值的函数{max=j;}}for(int j=1;j<=n+1;++j)//交换{swap(a[i][j],a[max][j]);}if(!a[i][i])//最大值等于0则说明该列都为0,肯定无解 return false;for(int j=1;j<=n;++j)//每一项都减去一个数(就是小学加减消元){if(j!=i){double temp=a[j][i]/a[i][i];for(int k=i+1;k<=n+1;++k){a[j][k]-=a[i][k]*temp;//a[j][k]-=a[j][i]*a[i][k]/a[i][i];}}}}//上述操作结束后,矩阵会变成这样/*k1*a=e1k2*b=e2k3*c=e3k4*d=e4*///所以输出的结果要记得除以该项系数,消去常数for(int i=1;i<=n;++i)a[i][n+1]/=a[i][i];return true;
}void solve(double x[])
{for(int i=1;i<=n;i++)for(int j=1;j<=n+1;j++)a[i][j]=0;for(int i=1;i<=n;i++){if(x[i]!=-1){a[i][i]=1;a[i][n+1]=x[i];}else{a[i][i]=node[i].size();for(auto v:node[i])a[i][v]=-1;}}Gauss();for(int i=1;i<=n;i++)x[i]=a[i][n+1];
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%lf%lf",x+i,y+i);for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);}solve(x);solve(y);for(int i=1;i<=n;i++)printf("%.5f %.5f\n",x[i],y[i]);return 0;
}

中石油训练赛 - Molecules(高斯消元解方程)相关推荐

  1. 中石油训练赛 - Switches(高斯消元求逆矩阵+逆矩阵求线性方程组)

    题目大意:给出一个 n * n 的布尔矩阵表示开关与灯的关系,现在每个灯来说,是否存在一种开关的集合,使得恰好使得只有当前灯是打开状态,其余灯都是熄灭状态,分别输出方案 题目分析:将开关视为变元,将灯 ...

  2. 洛谷 - P3389 【模板】高斯消元法(高斯消元解方程)

    题目链接:点击查看 题目大意:给出一个线性方程组,求解答案 题目分析:模板题,挂个模板,时间复杂度是 O( n^3 ) 的,其中 a[ 1 ][ 1 ] ~ a[ n ][ n ] 矩阵代表 x[ 1 ...

  3. HDU - 3364 Lanterns(高斯消元解方程(取模))

    题目链接:点击查看 题目大意:给出 n 盏灯和 m 个开关,每个开关可以控制多个灯,每次询问给定灯的最终状态,问有多少种方案可以到达 题目分析:以开关为变元,灯为方程列出方程组,每次求出有多少个自由元 ...

  4. POJ - 2065 SETI(高斯消元解方程(取模))

    题目链接:点击查看 题目大意:给出一个质数作为 mod,再给出一个字符串,每个字母对应着一个数字: ' * ' = 0 ' a ' = 1 ' b ' = 2 ... ' z ' = 26 假设字符串 ...

  5. 【BZOJ1923】外星千足虫,高斯消元解xor方程组

    Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...

  6. 第三十四章 数论——高斯消元解线性方程组

    第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...

  7. HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)

    题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...

  8. [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题

    [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...

  9. 高斯消元 AcWing 883. 高斯消元解线性方程组

    高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...

最新文章

  1. How to never give up
  2. “分库分表 ?选型和流程要慎重,否则会失控
  3. 两个服务器之间怎么传输大量数据速度快 java socket_一口气说出Kafka为啥这么快?...
  4. C#黔驴技巧之实现统计结果排名
  5. 机器学习实战10-Artificial Neural Networks人工神经网络简介(mnist数据集)
  6. java string补空格_Java String字符串补0或空格详解
  7. 关于Linux系统下若干易混淆目录的分析
  8. 13.软件架构设计:大型网站技术架构与业务架构融合之道 --- 业务意识
  9. 分享两个超好用的在线制图工具
  10. 二年级计算机学什么礼物,二年级的小朋友喜欢什么礼物(最美好的礼物二年级)...
  11. SSL证书收费的原因
  12. SAP 自动记账 零星记录
  13. Js一句话实现打开QQ和客服聊天
  14. SCI、EI论文框架
  15. cocos creator 实现手机震动的效果
  16. 把手账打印成书 把回忆装订成册
  17. 7点分析让你知道CISSP认证值不值得考
  18. 前端学习笔记(11)之过渡属性(transition)详解
  19. 单片机四路抢答器课程C语言设计,四路抢答器单片机课程设计.doc
  20. 蓝海战略与《蓝海战略》

热门文章

  1. sqlite to mysql_SqliteToMysql
  2. 利用sshpass实现ansible功能
  3. Redis操作hash类型
  4. MySQL等值连接的介绍
  5. 一致性hash算法原理
  6. Protobuf序列化的原理-总结
  7. Redis 为什么是单线程的?
  8. throws关键字_异常处理的第一种方式,交给别人处理
  9. Eureka深入理解
  10. Oracle数据库的安装和配置