哟,本来说好弃OJ的
结果还是回来了
23333333
这个题 use[i][j] = 第i个点在秒数为j的时候能不能到达
然后恩恩
要强调的是还记得kAc的迷宫么……
搞清楚状态!
mdzz
教室在2号……
233333
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 100000 + 5;
struct edge
{
int f,t,v;
}l[MAXN << 1];
int first[MAXN],next[MAXN << 1],tot;
void init()
{
memset(first,0xfff,sizeof(first));
tot = 0;
return;
}
void build(int f,int t,int v)
{
l[++tot] = (edge){f,t,v};
next[tot] = first[f];
first[f] = tot;
return;
}
struct zt
{
int x,t;
};
queue <zt> q;
bool use[MAXN][60];
void spfa(int s)
{
memset(use,0,sizeof(use));
use[s][0] = true;
q.push((zt){s,0});
while(!q.empty())
{
zt x = q.front();
q.pop();
int u = x.x;
for(int i = first[u];i != -1;i = next[i])
{
int v = l[i].t;
int t = (x.t + l[i].v) % 60;
while(t < 0)
t += 60;
if(!use[v][t])
q.push((zt){v,t});
use[v][t] = true;
}
}
return;
}
int n,m,s,e;
int f,t,v;
int main()
{
init();
scanf("%d %d",&n,&m);
for(int i = 1;i <= m;i ++)
{
scanf("%d %d %d",&f,&t,&v);
build(f,t,v);
build(t,f,v);
}
spfa(1);
int ans;
for(ans = 0;ans < 60;ans ++)
if(use[2][ans])
break;
if(ans < 10)
putchar('0');
printf("%d\n",ans);
return 0;
}