HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4818
深深地补一个坑~~~
现场赛坑在这题了,TAT。。。。
今天把代码改了下,过掉了,TAT
很明显的高斯消元的模型。
现场一开始想的也大概是对的。
根据度可以得到n个方程,加起来为1是一个方程,有一个是多余的。 加起来就是n个方程。
只可能是无穷解和唯一解的情况。
现场是先求解一遍,然后枚举所有可以加的,不停做高斯消元。
但是因为高斯消元是O(n^3) 的, 再枚举的话就是n^4了。。。。
这样做明显应该超时的,HDU交了这样做也是TLE,,,现场被坑死,一直返回WA, 然后程序就改得不成样子了。。。
其实枚举那个可以省略。
因为改变的就是最后一列。
可以扩展矩阵,在后面多加几列。 然后变化之后,直接就得到了x(n-1)的值。
只需要做一次高斯消元。
代码君:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <math.h>
using namespace std; #define eps 1e-6
const int MAXN=;
double a[MAXN][MAXN],x[MAXN];
int equ,var; int Gauss()
{
int i,j,k,col,max_r;
for(k=,col=;k<equ&&col<var;k++,col++){
max_r = k;
for(i=k+;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r = i;
if(fabs(a[max_r][col])<eps)return ; //无解,有自由变元
if(k != max_r){
for(j=col;j<var;j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+;j<var;j++)a[k][j]/=a[k][col];
a[k][col] = ;
for(i=;i<equ;i++)
if(i!=k){
x[i] -= x[k]*a[i][k];
for(j=col+;j<var;j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=;
}
}
return ;
} vector<int>vec[MAXN];
int g[MAXN][MAXN];
int du[MAXN];
int add[MAXN]; int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
int n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i = ;i < n;i++)
vec[i].clear();
memset(g,,sizeof(g));
memset(du,,sizeof(du));
int u,v;
while(m--)
{
scanf("%d%d",&u,&v);
if(u == v)continue;
g[u][v] = ;
}
for(int i = ;i < n;i++)
{
for(int j = ;j < n;j++)
if(j != i && g[i][j])
{
du[i]++;
vec[j].push_back(i);
}
}
equ = var = n;
for(int i = ;i < n;i++)
x[i] = ;
memset(a,,sizeof(a));
for(int i = ;i < n;i++)
{
a[i][i] = -;
int sz = vec[i].size();
for(int j = ;j < sz;j++)
{
int v = vec[i][j];
if(i == v)continue;
a[i][v] = 1.0 / du[v];
}
}
for(int i = ;i < n;i++)
a[n-][i] = ;
x[n-] = ; for(int k = ;k < n-;k++)
if(g[n-][k] == )
{
for(int i = ;i < n-;i++)
{
if(g[n-][i])a[i][var] = 1.0/(du[n-]+);
else a[i][var] = ;
}
a[k][var] = 1.0/(du[n-]+);
a[n-][var] = ;
add[var] = k;
var++;
} if(!Gauss())
{
printf("INF\n");
continue;
}
double tt = x[n-];
double now = x[n-];
int ans = -;
for(int i = n;i < var;i++)
{
if(x[n-]/a[n-][i] > now)
{
ans = add[i];
now = x[n-]/a[n-][i];
}
}
printf("%d %d\n",,ans);
}
return ;
}
HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)的更多相关文章
- HDU 4870 Rating(高斯消元 )
HDU 4870 Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP ...
- HDU 3949 XOR(高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排 ...
- [ACM] hdu 4418 Time travel (高斯消元求期望)
Time travel Problem Description Agent K is one of the greatest agents in a secret organization calle ...
- [hdu 3949]线性基+高斯消元
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...
- HDU 4870 Rating (高斯消元)
题目链接 2014 多校1 Problem J 题意 现在有两个账号,初始$rating$都为$0$,现在每次打分比较低的那个,如果进前$200$那么就涨$50$分,否则跌$100$分. 每一 ...
- HDU 3949 XOR(高斯消元搞基)
HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第 ...
- poj 1681 Painter's Problem(高斯消元)
id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...
- HDU 3571 N-dimensional Sphere( 高斯消元+ 同余 )
N-dimensional Sphere Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- HDU 3364 Lanterns (高斯消元)
题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...
随机推荐
- Ajax和jsonp区别
大多数情况下,无论是框架还是自己实现都是通过Ajax的方式来向后端请求数据的,而Ajax之间是通过传输json格式的文件来进行数据的传输的,大家对Ajax也很熟悉了,那么为什么我又要使用jsonp呢? ...
- python-super1
一.问题的发现与提出 一般子类在继承父类后,若子类覆盖了父类,则只执行子类,不执行父类.如果没有,则执行父类代码. 发现使用super()后,子类,父类都会执行,比较疑惑,记录学习,super知识点 ...
- oracle 学习day01
1.关系型数据库的设计范式 范式:是关系型数据库关系模型规范化的标准.范式是建立在函数依赖的基础上. 函数依赖:如果表中某一个字段Y的值是有另外一个字段或一组字段X的值来确定,就称作Y函数 ...
- [转]mitmproxy套件使用攻略及定制化开发
mitmproxy是一款支持HTTP(S)的中间人代理工具.不同于Fiddler2,burpsuite等类似功能工具,mitmproxy可在终端下运行.mitmproxy使用Python开发,是辅助w ...
- maven:多个镜像配置
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>nexus-aliyun</mi ...
- js 替换任意字符串中间几位为*星号
<script> var str='河南纳智企业管理咨询有限公司'; a=str.substr(0,2)+'***'+str.substr(5,str.split('').length); ...
- 创建.symlnk文件
本文转自:https://zhidao.baidu.com/question/1695955535823679548.html 1 2 3 4 5 6 7 8 9 10 11 创建符号链接. MK ...
- C#, CLR, and .NET Framework versions
- TcxGrid Sqlite text类型 显示memo
- python中使用pillow绘制汉字
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow from PIL import Image, ImageFont, I ...