zoukankan      html  css  js  c++  java
  • JZYZOJ1355 [usaco2007]奶牛赛跑 矩阵乘法 离散化

    http://172.20.6.3/Problem_Show.asp?id=1355

     
    写的时候本来想离散化,“1000^2的数组放一两个到函数里而已嘛,指定承受得住”,然后没离散化,然后就爆栈了,第一次知道直接爆栈是不报错的,只会运行之后return value 3221225477,学习了orz。
    然后重写了一份离散化的……其实我觉得不离散化,数组就在外面声明也未尝不可啊,n<1000,n^3*logn,大概,不会超时吧(宛如那戏台上的老将军,背上插满了flag)。
     
    代码
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 #include<cmath>
     6 using namespace std;
     7 const int maxn=210;
     8 int n,m,s,t,siz;
     9 struct nod{int x,y,v;}aa[maxn];
    10 struct mat{
    11     int e[maxn][maxn];
    12     mat(){memset(e,63,sizeof(e));}
    13 };mat a;
    14 int bb[maxn]={};
    15 mat mul(mat x,mat y){
    16     mat z;
    17     for(int i=1;i<=siz;i++){
    18         for(int j=1;j<=siz;j++){
    19             for(int k=1;k<=siz;k++){
    20                 z.e[i][j]=min(z.e[i][j],x.e[i][k]+y.e[k][j]);
    21             }
    22         }
    23     }return z;
    24 }
    25 mat pow(mat x,int k){
    26     mat z;
    27     for(int i=1;i<=siz;i++){
    28         z.e[i][i]=0;
    29     }
    30     while(k){
    31         if(k&1)z=mul(z,x);
    32         x=mul(x,x);
    33         k/=2;
    34     }
    35     return z;
    36 }
    37 int main(){
    38     scanf("%d%d%d%d",&n,&m,&s,&t);
    39     for(int i=1;i<=m;i++){
    40         scanf("%d%d%d",&aa[i].v,&aa[i].x,&aa[i].y);
    41         bb[2*i-1]=aa[i].x;bb[2*i]=aa[i].y;
    42     }sort(bb+1,bb+1+m*2);
    43     siz=unique(bb+1,bb+1+m*2)-bb-1;
    44     s=lower_bound(bb+1,bb+1+siz,s)-bb;
    45     t=lower_bound(bb+1,bb+1+siz,t)-bb;
    46     for(int i=1;i<=m;i++){
    47         aa[i].x=lower_bound(bb+1,bb+1+siz,aa[i].x)-bb;
    48         aa[i].y=lower_bound(bb+1,bb+1+siz,aa[i].y)-bb;
    49         a.e[aa[i].x][aa[i].y]=aa[i].v;
    50         a.e[aa[i].y][aa[i].x]=aa[i].v;
    51     }
    52     mat z=pow(a,n);
    53     printf("%d
    ",z.e[s][t]);
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    关键字 final
    继承中的构造方法
    方法的重写
    使用tar 和 split 将文件打包、压缩并分割成指定大小
    标准Web系统的架构分层
    Android的安全机制 1 -- 老罗
    Android 在 SElinux下 如何获得对一个内核节点的访问权限
    移动数据 流程分析
    ARM Linux 3.x的设备树(Device Tree)
    如何分析Android的Log
  • 原文地址:https://www.cnblogs.com/137shoebills/p/7787049.html
Copyright © 2011-2022 走看看