五月份没有写过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 文档翻译】【第3部分】必要的和有用的 C API XLM 函数

    本节中将介绍几个对于 DLL 和 XLL 开发人员来说十分重要的回调函数,xlfRegister 函数是可用于注册函数,使得 Excel 可以直接访问 DLL 和 XLl 中的函数. xlfUnreg ...

  2. Target runtime Apache Tomcat v6.0 is not defined.错误解决方法

    一.背景 最近在使用本地的tomcat进行运行项目的时候,发现出现了如题所述的问题.不知道什么原因,经过努力解决了该问题. 二.解决步骤 右击项目---选择属性---选择targeted runtim ...

  3. Java IO流总结

    Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...

  4. struts.xml配置详解

    struts.xml是我们在开发中利用率最高的文件,也是Struts2中最重要的配置文件. 一下分别介绍一下几个struts.xml中常用到的标签 1.<include> 利用includ ...

  5. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  6. iOS应用支持IPV6,就那点事儿

    原文连接   果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...

  7. String[] a = new String[]{"1","2"},我如果想增加一个"3"到a中,如何增加?

    在java中数组是定长的,当你声明了数组的大小后数组的长度就不能改变在你的程序中,数组的初始化大小为2,a[0]="1";a[1]="2",所以无法产生元素a[ ...

  8. 局域网聊天Chat(马士兵视频改进版)

    Github地址: https://github.com/BenDanChen/Chat Chat 小小的聊天系统,主要是跟着网上的马士兵老师的公开视频然后再自己反思有什么地方需要改进的地方,然后大体 ...

  9. 借助LinkedHashMap实现基于LRU算法缓存

    一.LRU算法介绍 LRU(Least Recently Used)最近最少使用算法,是用在操作系统中的页面置换算法,因为内存空间是有限的,不可能把所有东西都放进来,所以就必须要有所取舍,我们应该把什 ...

  10. php 上传文件实例 上传并下载word文件

    上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...