| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:真·AC代码In Reply To:真·AC代码 Posted by:RiseFalcon at 2016-04-07 12:25:20 >
>
>
>
> 衡水中学的伸手党请出门右拐滏阳河
>
>
>
> #include<cstdio>
> #include<cstring>
> #include<queue>
> #include<con>
> #include<iostream>
> #define MAX_NODE 2010
> #define MAX_LENS 200100
> char c;
> inline void read(int &k){k=0;
> do{c=getchar();}while(c<'0'||c>'9');
> do{k=k*10+c-'0';c=getchar();}while(c>='0'&&c<='9');
> }
> struct Path{
> int to;
> int dis;
> int next;
> Path(){to=-1;dis=0x7ffffff;next=-1;}
> };
> struct Picture{
> int from,to,dis;
> }PIC[MAX_LENS];
> struct Node{
> long long int f;
> int g;
> int place;
> Node(long long int a=0,int b=0,int c=0):f(a),g(b),place(c){}
> bool operator < (const Node &a)const{
> return f<a.f;
> }
> };
> struct Heap{
> int size;
> Node table[MAX_LENS*10];
> Heap(){size=0;}
> void exchange(Node &a,Node &b){
> Node c=a;a=b;b=c;
> }
> bool empty(){return size==0;}
> void push(const Node &number){
> int place=size;
> int last;
> table[size]=number;
> size++;
> while(place!=0){
> last=(place-1)>>1;
> if(table[place]<table[last])exchange(table[last],table[place]);
> else break;
> place=last;
> }
> }
> Node pop(){
> Node ans=table[0];
> table[0]=table[--size];
> int t=0;
> int l=1,r=2;
> while(l<size)
> {
> if(r<size&&table[r]<table[l])l=r;
> if(table[l]<table[t]){exchange(table[t],table[l]);t=l;}
> else break;
> l=(t<<1|1);r=(t<<1)+2;
> }
> return ans;
> }
> };
> struct Pic{
> int lens;
> int points;
> int len_num;
> int cnt[MAX_NODE];
> int dis[MAX_NODE];
> int head[MAX_NODE];
> Path table[MAX_LENS];
> Heap q;
> Pic(){lens=0;memset(dis,40,sizeof(dis));memset(head,-1,sizeof(head));doing();}
> void clean(){
> lens=0;memset(head,-1,sizeof(head));memset(table,-1,sizeof(table));
> }
> void add(const bool &flag=1){
> if(flag==1){
> for(int i=1;i<=len_num;++i){
> table[++lens].next=head[PIC[i].from];
> table[lens].to=PIC[i].to;
> table[lens].dis=PIC[i].dis;
> head[PIC[i].from]=lens;
> }
> }
> else{
> for(int i=1;i<=len_num;++i){
> table[++lens].next=head[PIC[i].to];
> table[lens].to=PIC[i].from;
> table[lens].dis=PIC[i].dis;
> head[PIC[i].to]=lens;
> }
> }
> }
> void dijsa(int from){
> dis[from]=0;
> q.push(Node(0,0,from));
> while(!q.empty()){
> Node ppt=q.pop();
> if(dis[ppt.place]!=ppt.f)continue;
> for(int i=head[ppt.place];i!=-1;i=table[i].next){
> if(dis[table[i].to]>dis[ppt.place]+table[i].dis){
> dis[table[i].to]=dis[ppt.place]+table[i].dis;
> q.push(Node(dis[table[i].to],0,table[i].to));
> }
> }
> }
> }
> void A_Star(int from,int to,int Times){
> if(from==to)++Times;
> while(!q.empty())q.pop();
> q.push(Node(dis[from],0,from));
> while(!q.empty()){
> Node pos=q.pop();
> if(pos.place==to){
> --Times;
> if(Times==0){
> std::cout<<pos.g;
> return ;
> }
> }
> for(int i=head[pos.place];i!=-1;i=table[i].next){
> q.push(Node( dis[table[i].to]+table[i].dis+pos.g, table[i].dis+pos.g ,table[i].to));
> }
> }
> puts("-1");
> return;
> }
> int doing(){
> // freopen("dota.in","r",stdin);
> // freopen("dota.out","w",stdout);
> read(points);
> read(len_num);
> int a,b,c,from,to,Times;
> for(int i=1;i<=len_num;++i){
> read(a);read(b);read(c);
> PIC[i].from=a;
> PIC[i].to=b;
> PIC[i].dis=c;
> }
> read(from);read(to);read(Times);
> add(0);dijsa(to);
> clean();add(1);
> A_Star(from,to,Times);
> return 0;
> }
> }a;
> int main(){;}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator