五月份没有写过blog.

期中考刚过......漫漫文化课,无尽头.

马上要为联赛开坑了,激动啊.

刚听了孙柘的演讲..%%%

最近刷的题只有一道启发式合并,一道分层图,一道差分约束..然后不知不觉破80啦

80其实是个很小的题量,但是之所以想讲一下是因为

自己在70+的位置浪了很久吧,所以衍生出一种好难破80的feel~

打算去看A*算法和K短路,

poj1077--Eight(据shy说A*入门题)

被自己逗笑了..居然开始写暴力了..因为这里暴力不虚..再加上个人看到A*淦不动啊 于是码了一道裸的bfs果然没什么营养..说好的要写A*呢!

里面敲了个康托展开,哈希利器啊

ll fold()
{
  ll temp,t=;
  ;i<;i++)
  {
    temp=;
    ;j<;j++)
     if(a1.num[j]<a1.num[i])temp++;
    t+=temp*jc[-i];
  }  return t;
} 

然后听说bzoj1073是道K短路,又是一道二百人AC的首页题..可怕..还有十分要cheat..不是很想做啊..但是这道题有份题解很兹辞

传送门:http://z55250825.blog.163.com/blog/static/150230809201422581743407/

然后必刷水题poj2449,在这里MARK一下.

poj2449

第一次写stl的优先队列,果然方便啊..这里有两个没弄懂的点:

1.A结构的定义 const const是什么鬼

2.原blog  http://blog.csdn.net/sdj222555/article/details/7690081,明明都考虑了有环的情况呀,这样spfa()不是会爆炸?在comments评论了,博主还未解答.//已解决,我sb了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define N 500005
#define inf 1000000000
using namespace std;
int edgenum,x,y,k,w,n,m,st,ed;
],pri[N];
struct A
{
  int f,g,v;
  bool operator <(const A a)const
  {
    if(a.f==f)return a.f<g;
    return a.f<f;
  }
};
void add(int u,int v,int w)
{
  edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;pri[edgenum]=w;
  edgenum++;vet[edgenum]=u;next[edgenum]=head[v];head[v]=edgenum;pri[edgenum]=w;
}
void spfa(int src)
{
  ;i<=n;i++)dis[i]=inf;dis[src]=;
  memset(flag,,,tail=;q[]=src;
  while(tou<=tail)
  {
    ;
    )
    {
      int v=vet[e];
      ==){e=next[e];continue;}
      if(dis[v]>dis[u]+pri[e])
      {
        dis[v]=dis[u]+pri[e];
        )
        {
          tail++;q[tail]=v;flag[v]=;
        }
      }
      e=next[e];
    }
    tou++;
  }
}
int Astar(int st,int ed)
{
  ;priority_queue<A>Q;
  if(st==ed)k++;
  ;
  A t,tt;
  t.v=st;t.g=;t.f=t.g+dis[st];Q.push(t);
  while(!Q.empty())
  {
    tt=Q.top();Q.pop();//把tt弹出队列
    if(tt.v==ed)
    {
      cnt++;if(cnt==k)return tt.g;
    }
    int u=tt.v,e=head[u];
    )
    {
      ==){e=next[e];continue;}
      t.v=vet[e];
      t.g=tt.g+pri[e];t.f=t.g+dis[t.v];Q.push(t);//F(v)=f(v)+h(v);
      e=next[e];
    }
  }
  ;
}
int main()
{
   scanf("%d%d",&n,&m);
   ;i<=m;i++)
   {
     scanf("%d%d%d",&x,&y,&w);
     add(x,y,w);
   }
   scanf("%d%d%d",&st,&ed,&k);
   spfa(ed);
   printf("%d\n",Astar(st,ed));
   ;
}

刷了一道bzoj1957,感觉这题真高明啊,手写堆党拽起啊,hhh

debug的时候又发现自己各种sb打错,粗心活该

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define inf 2000000000000
#define N 400005
using namespace std;
struct A
{
  double f,g;
  int v;
};
A a[];
],top,vet[N],next[N],head[N],q[N];
double e,pri[N],dis[N];
bool comp(A a,A b)
{
  ;;
  return(a.g<b.g);
}
void push_up(int kk)
{
  int k=kk;
  >&&comp(a[k],a[k/]))
  {
    A t;t=a[k];a[k]=a[k/];a[k/]=t;
    //swap(a[k],a[k/2]);
    k=k/;
  }
}
void push_down(int kk)
{
  int k=kk;
  <=top)
  {
    +<=top&&comp(a[k*+],a[k])&&comp(a[k*+],a[k*]))
    {
      A t;t=a[k];a[k]=a[k*+];a[k*+]=t;
      //swap(a[k],a[k*2+1]);
      k=k*+;
    }],a[k]))
    {
      A t;t=a[k];a[k]=a[k*];a[k*]=t;
      //swap(a[k],a[k*2]);
      k=k*;
    }else break;
  }
}
void add(int u,int v,double w)
{
  edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;pri[edgenum]=w;
}
void spfa(int src)
{
  memset(flag,,sizeof(flag));
  ;i<=n;i++)dis[i]=inf;flag[src]=;dis[src]=;q[]=src;
  ,tail=;
  while(tou<=tail)
  {
    int u=q[tou%N],ee=head[u];
    )
    {
      int v=vet[ee];
      ==){ee=next[ee];continue;}
      if(dis[v]>dis[u]+pri[ee])
      {
        dis[v]=dis[u]+pri[ee];
        )tail++,q[tail%N]=v,flag[v]=;
      }
      ee=next[ee];
    }
    tou++;flag[u]=;
  }
}
int Astar(int st ,int ed)
{
  ;
  A t,tt;;
  t.v=st;t.g=;t.f=dis[st];a[]=t;top=;
  )
  {
    tt=a[];a[]=a[top];top--;push_down();
    //for(int i=1;i<=top;i++)printf("%lf ",a[i].f);printf("\n");
    if(tt.v==ed)
    {
      //printf("%lf %lf\n",tt.f,e);
      if(e>=tt.g)e-=tt.g,cnt++;else return cnt;
    }
    int u=tt.v,ee=head[u];
    )
    {
      ==){ee=next[ee];continue;}
      t.v=vet[ee];t.g=tt.g+pri[ee];t.f=t.g+dis[t.v];top++;a[top]=t;push_up(top);
      ee=next[ee];
    }
  }
  return cnt;
}
int main()
{
  scanf("%d%d%lf",&n,&m,&e);int u,v;double w;
  ;i<=m;i++)
  {
    scanf("%d%d%lf",&u,&v,&w);
    add(u,v,w);add(v,u,w);
  }
  spfa(n);printf(,n));
}

还有,还没动过计算几何怎么办啊%>_<%

5.15[没什么营养的一段日子]A*的更多相关文章

  1. 【一段日子荟萃】where should I go.

    当<UNIX环境高级编程>和<鸟哥的私房菜>到我的桌头的时候,我忽然产生了厌倦的心. NO,我不是想做这个,我不是想学习这个操作系统的结构和接口. 我想些一个操作系统,更一般的 ...

  2. 从苏宁电器到卡巴斯基第15篇:我在苏宁电器当营业员 VII

    我们苹果的倒班制度 当年我在苏宁的时候,实行的是单休制度,而且只能选择在周一到周五其中的某一天,因为周六周日顾客比较多,是不允许休息的.尽管是单休,但并不表示我们在上班的时候每天都要完完整整地上八小时 ...

  3. IT实习总结-上海的实习的日子

    在上海实习两个多月,从找工作,到面试,最后到创业公司工作,体会了一个人在外工作的那种工作时的压力与双休时的寂寞,有时甚至有点迷惘,可能这就是生活,每个人都会经历,在经历的过程中会有不同的味道. 说说我 ...

  4. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断 ...

  5. POJ-3468 A Simple Problem with Integers (区间求和,成段加减)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  6. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  7. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  8. NOI2018游记&我的OI历程

    day1 今天是报到日,坐着早上9点的飞机到了长沙,午饭时间到达雅礼洋湖. 宿舍还是一模一样,虽然是在女生宿舍. wifi信号还是一样的德行,刻意避开了宿舍内,只好把手机放在窗台上开热点. 饭菜还是如 ...

  9. 直面秋招!非科班生背水一战,最终拿下阿里等大厂offer!

    前言 2020年已经接近到9月份了,很多粉丝朋友都对金九银十雀雀欲试了吧!也有很多朋友向我求教经验,因为我自己工作相对于稳定,在这里给大家分享一个粉丝朋友的经历,他作为一个曾经的菜鸡面试者,在不断的失 ...

随机推荐

  1. 【XLL API 函数】 xlGetInst

    返回正在调用 DLL 的 Excel 实例的实例句柄. 原型 Excel4(xlGetInst, LPXLOPER pxRes, 0); /* returns low part only */ Exc ...

  2. ios 宏定义 系统版本 判定

    当需要判断iOS系统版本的时候,相信很多人都会这么干: #define SystemVersion [[UIDevice currentDevice] systemVersion].floatValu ...

  3. August 12th 2016 Week 33rd Friday

    Everything is good in its season. 万物逢时皆美好. Every dog has its day. You are not in your best condition ...

  4. java Class<?>和Class<T>等

    E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确定 ...

  5. myeclipse 8.5 注册码

    刚才启动突然发现MyEclipse原来是收费的...汗一把,到弹出注册框我才知道.....老天啊我活的该有多窝囊.. 弹框很烦人,我一个穷书生既想继续学习又囊中羞涩无力购买,只好用盗版了(找个理由辩解 ...

  6. Linux安装xwindow图形界面

    在我们安装Linux系统时,刚开始的时候可能没有安装图形界面的需要,但在使用过程中却有可能产生这种需求.那么这种情况下,我们需不需要重新安装Linux系统来安装桌面呢?答案是不需要.下面我将交大家在已 ...

  7. Quartus II9.0 使用中文输入的方法

      Quartus II可以用中文了 我们都知道高版本的quartus里面不支持中文,就连最新版的10.0也不支持,还好找到了一种方法,和大家分享一下: 具体步骤:quartus ——tools——o ...

  8. 数据库支持emoji表情

    从MySQL5.5.3开始,MySQL 支持一种utf8mb4的字符集,这个字符集能够支持4字节的UTF8编码的字符.utf8mb4字符集能够完美地兼容utf8字符串.在数据存储方面,当一个普通中文字 ...

  9. gzip

    gzip -c 将输出写到标准输出上,并保留原文本 gzip * : 把当前目录中的每个文件压缩成.gz文件 [root@NB gzip]# ls mysql-bin. mysql-bin..tar ...

  10. 記錄一次CRS-0184: Cannot communicate with the CRS daemon的解決

    1. 描述: 使用crs_stat –t 命令查看rac服務,直接報CRS-0184: Cannot communicate with the CRS daemon.錯誤 但是奇怪的是我們的DB是沒有 ...