样例1的说明:一共只有两个地点(多么福利的数据啊),也只有一条道路,耗时为54秒。最优方案为,经过这个道路9次,耗时486秒,即8分06秒,于8:08:06到达教室。当然,最优方案不唯一。
样例2的说明:走1->3->1->2,用时17+17+26,于8:01:00到达;或走1->2->3->1->2,用时26-9+17+26,于8:01:00到达。
/*
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;
}