五月份没有写过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. [Android Pro] svn实例

    referece : http://www.cnblogs.com/cnblogsfans/archive/2010/03/21/1690891.html 签出 svn checkout URL pa ...

  2. September 12th 2016 Week 38th Monday

    After all, tomorrow is another day. 不管怎样,明天又是全新的一天. Another day? Maybe.  Remember when you reach for ...

  3. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  4. C++面试之GetMemory问题

    http://blog.csdn.net/zhuxiaoyang2000/article/details/8084629 #include <iostream> #include < ...

  5. Struts2之OGNL

    一.OGNL是什么? OGNL(Object-Graph Navigation Language)对象图导航语言,是一种表达式语言,它可以 1.遍历对象的结构图 2.存取对象的属性(实例属性和静态属性 ...

  6. NYOJ题目77开灯问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsUAAAHXCAIAAADbX7BCAAAgAElEQVR4nO3dvVLrSMAm4L0Jci6E2B

  7. centos 安装 py pyhs2

    1. yum install gcc-c++ cyrus-sasl-develpip2.7 install pyhs2 --->好像不行,在试试 用于 hive thrift 访问 2. os. ...

  8. MyEclipse破解(MEGen.java)

    步骤: 1.将MEGen.java粘贴到任意web项目下,运行结果如下: 2.输入注册名:如sun,得到注册码: 3.Window  >>  Preference  >>  S ...

  9. cache buffers

    buffers缓冲,可以型象的理解为漏斗.如果有大量的数据要写入磁盘,由于数据量很大,磁盘不能一下子接收,所以这个时候,就有了buffer这个漏斗,先把数据放入这个漏斗里面,然后让它慢慢的注入磁盘,这 ...

  10. 数据结构和算法 – 5.模式匹配和文本处理

    了使用正则表达式,需要把 RegEx 类引入程序.大家可以在 System.Text.RegularExpression 名字域中找到这种类.一旦把这种类导入了程序,就需要决定想要用 RegEx 类来 ...