中石油训练赛 - Molecules(高斯消元解方程)
题目链接:点击查看
题目大意:笛卡尔坐标系上给出 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(高斯消元解方程)相关推荐
- 中石油训练赛 - Switches(高斯消元求逆矩阵+逆矩阵求线性方程组)
题目大意:给出一个 n * n 的布尔矩阵表示开关与灯的关系,现在每个灯来说,是否存在一种开关的集合,使得恰好使得只有当前灯是打开状态,其余灯都是熄灭状态,分别输出方案 题目分析:将开关视为变元,将灯 ...
- 洛谷 - P3389 【模板】高斯消元法(高斯消元解方程)
题目链接:点击查看 题目大意:给出一个线性方程组,求解答案 题目分析:模板题,挂个模板,时间复杂度是 O( n^3 ) 的,其中 a[ 1 ][ 1 ] ~ a[ n ][ n ] 矩阵代表 x[ 1 ...
- HDU - 3364 Lanterns(高斯消元解方程(取模))
题目链接:点击查看 题目大意:给出 n 盏灯和 m 个开关,每个开关可以控制多个灯,每次询问给定灯的最终状态,问有多少种方案可以到达 题目分析:以开关为变元,灯为方程列出方程组,每次求出有多少个自由元 ...
- POJ - 2065 SETI(高斯消元解方程(取模))
题目链接:点击查看 题目大意:给出一个质数作为 mod,再给出一个字符串,每个字母对应着一个数字: ' * ' = 0 ' a ' = 1 ' b ' = 2 ... ' z ' = 26 假设字符串 ...
- 【BZOJ1923】外星千足虫,高斯消元解xor方程组
Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...
- 第三十四章 数论——高斯消元解线性方程组
第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...
- HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)
题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...
- [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题
[AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...
- 高斯消元 AcWing 883. 高斯消元解线性方程组
高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...
最新文章
- How to never give up
- “分库分表 ?选型和流程要慎重,否则会失控
- 两个服务器之间怎么传输大量数据速度快 java socket_一口气说出Kafka为啥这么快?...
- C#黔驴技巧之实现统计结果排名
- 机器学习实战10-Artificial Neural Networks人工神经网络简介(mnist数据集)
- java string补空格_Java String字符串补0或空格详解
- 关于Linux系统下若干易混淆目录的分析
- 13.软件架构设计:大型网站技术架构与业务架构融合之道 --- 业务意识
- 分享两个超好用的在线制图工具
- 二年级计算机学什么礼物,二年级的小朋友喜欢什么礼物(最美好的礼物二年级)...
- SSL证书收费的原因
- SAP 自动记账 零星记录
- Js一句话实现打开QQ和客服聊天
- SCI、EI论文框架
- cocos creator 实现手机震动的效果
- 把手账打印成书 把回忆装订成册
- 7点分析让你知道CISSP认证值不值得考
- 前端学习笔记(11)之过渡属性(transition)详解
- 单片机四路抢答器课程C语言设计,四路抢答器单片机课程设计.doc
- 蓝海战略与《蓝海战略》