题目链接: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题)的更多相关文章

  1. HDU 4870 Rating(高斯消元 )

    HDU 4870   Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP ...

  2. HDU 3949 XOR(高斯消元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排 ...

  3. [ACM] hdu 4418 Time travel (高斯消元求期望)

    Time travel Problem Description Agent K is one of the greatest agents in a secret organization calle ...

  4. [hdu 3949]线性基+高斯消元

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...

  5. HDU 4870 Rating (高斯消元)

    题目链接  2014 多校1 Problem J 题意  现在有两个账号,初始$rating$都为$0$,现在每次打分比较低的那个,如果进前$200$那么就涨$50$分,否则跌$100$分.   每一 ...

  6. HDU 3949 XOR(高斯消元搞基)

    HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第 ...

  7. poj 1681 Painter&#39;s Problem(高斯消元)

    id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...

  8. HDU 3571 N-dimensional Sphere( 高斯消元+ 同余 )

    N-dimensional Sphere Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  9. HDU 3364 Lanterns (高斯消元)

    题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...

随机推荐

  1. gulp.js 的安装以及使用

    首先:电脑需要安装 Node.js 一个大绿色的安装按钮,点击就可以. 但还是推荐,点击download选中一款适合电脑配置的版本. Node安装过程,就是下一步 and 下一步~~ 测试手否安装成功 ...

  2. TED_Topic10:The case for engineering our food

    By Pamela Ronald Pamela Ronald studies the genes that make plants more resistant to disease and stre ...

  3. 【干货】DD 和 netcat实战---擦除数据和远控

    原创:Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Using dd Continued DD也是一个复制设备数据的工具,比特流复制 ...

  4. 【ARTS】01_01_左耳听风-20181112~1116

    每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorithm.Review.Tip.Share 简称A ...

  5. 【Hadoop】搭建完全分布式的hadoop【转】

    转自:http://www.cnblogs.com/laov/p/3421479.html 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统 ...

  6. docker 构建带健康检查的redis镜像

    =============================================== 2018/11/5_第1次修改                       ccb_warlock == ...

  7. 用Executors工具类创建线程池

    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 线程池主要用来解决线程生命周期开销问题和资源不足问题.通过对多个任务重用线程,线程创建 ...

  8. sublime text2快捷键

    mac: command+option+f : 替换, find what: (.*) replace with:"$1": "1"     或者: data: ...

  9. HDR 视频编码

    前转换以及后转换:-f xxx.cfg (以及注意工作目录以及路径名/和//) HEVC视频编码:-c xxx.cfg  -c xx.cfg(视频的配置文件)

  10. js replace,正则截取字符串内容

    1.js replace替换,使用 http://www.jb51.net/article/43949.htm 顺便记录一下 e.g. js获取sql中的可替换参数$id,$name."SE ...