基础搜索

1.codevs1961

/*
dfs.
f[i][j]表示是否能到第i个点时秒数为j
*/
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<cstdio>
#include<cstring>

#define N 10001

using namespace std;
int head[N],f[N][60];
int n,m,ans,cnt,now;
struct edge
{
    int u,v,w,next;
}e[N<<1];

inline void add(int u,int v,int w)
{
    e[++cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt;
}

void dfs(int x,int sum)
{
    sum=(sum+60)%60;
    if(f[x][sum]) return;
    f[x][sum]=1;
    for(int i=head[x];i;i=e[i].next)
      dfs(e[i].v,(sum%60+e[i].w+60)%60);
}

int main()
{
    int x,y,z;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);add(y,x,z);
    }dfs(1,0);
    for(int i=0;i<=60;i++)
    {
        if(f[2][i])
        {
            if(i<10) printf("0");
            printf("%d\n",i);
            return 0;
        }
    }
    printf("60\n");
    return 0;
} 
View Code

 

posted @ 2017-08-21 15:39  安月冷  阅读(126)  评论(0编辑  收藏  举报