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条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...
随机推荐
- 五个案例让你明白GCD死锁(转)
转自:http://ios.jobbole.com/82622/ 死锁一直都是在使用多线程时,需要注意的一个问题.以前对同步.异步,串行.并行只有一个模糊的概念,想想也是时候整理一下了.再看看之前的博 ...
- keepalived启动不成功,状态一直是inactive(dead) 的解决办法以及keepalived高版本没有rc.d目录,虚拟VIP无法访问问题
安装配置教程我就不说了,网上很多,这里只给出我遇到的两个坑: 1 rc.d目录 ,kp在1.4版本之后rc.d要去解压之后的源码包里去找,make之后的目录里面没有了,我使用的是2.0.13最新版本, ...
- Quartus II 破解教程—FPGA入门教程【钛白Logic】
这一节主要说明如何破解Quartus II 13.1.首先找到我们提供的破解工具,这里我们的电脑是64位的,所以使用64位破解器.如下图. 第一步:将破解工具拷贝到安装目录下“D:\altera\13 ...
- Interval Sum I && II
Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. ...
- Linux网络状态工具ss命令使用详解【转】
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix dom ...
- win10 无法打开 APICloud Studio 2 的解决方案
坑爹. 新搭建了系统 apicloud studio2 打开无反应 无任何报错提示 双击没有方案.弄了一天 最后搞定. . 百度搜索 win10 null.sys 替换进去 C:/Win ...
- JPA 菜鸟教程 15 继承-一个表-SINGLE_TABLE
原地址:http://blog.csdn.net/JE_GE/article/details/53678422 继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举 ...
- 不使用第三方软件、使用IE11自带功能来屏蔽浏览器广告
第一步: 下载后面的附件http://files.cnblogs.com/limits/IE11%E5%8E%BB%E5%B9%BF%E5%91%8A.zip 打开此路径IE11跟踪保护+CSS去广告 ...
- 解决RabbitMQ service is already present - only up...
C:\Users\Administrator>rabbitmq-service install RabbitMQ service is already present - only updati ...
- .NetCore下 Exceptionless 分布式日志的个性化处理
Event Type 在Exceptionless中有 Exception .LogMessage.Broken Links .Feature Usages 接下来就这几种类型分别添加日志记录 Exc ...