Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

贴一份深搜代码

Posted by zhaohailin at 2017-04-07 18:31:35 on Problem 1062
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
struct node {
    int y,l,next;
}k[150005];
struct point{
    int p,l,n;
}sp[110];
int lm,head[30005],m,n;
int vis[30005],sta[30005];
void init(){
    lm=0;
    memset(head,-1,sizeof(head));
}
void add(int u,int v,int w){
    k[lm].y=v;
    k[lm].l=w;
    k[lm].next=head[u];
    head[u]=lm++;
}
int dfs(int x,int p,int l,int be,int ml,int mn ){
    if(l-mn>m||ml-l>m){
        return p;
    }
    if(l>ml)ml=l;
    if(l<mn)mn=l;
    p-=be;
    p+=sp[x].p;
    int minn=p;
    for(int i=head[x];~i;i=k[i].next){
        int y=k[i].y,pr=k[i].l;
        if(vis[y])continue ;
        vis[y]=1;
        int ans=dfs(y,p,sp[y].l,pr,ml,mn);
        minn=min(minn,ans);
        vis[y]=0;
    }
    return minn;
}
int main(){
    while(cin>>m>>n){
        init();
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&sp[i].p,&sp[i].l,&sp[i].n);
            for(int j=0;j<sp[i].n;j++){
                int x,y;
                scanf("%d%d",&x,&y);
                add(i,x,sp[i].p-y);
            }
        }
        memset(vis,0,sizeof(vis));
        vis[1]=1;
        cout<<dfs(1,0,sp[1].l,0,sp[1].l,sp[1].l)<<endl;
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator