Untitled
By: a guest | Mar 21st, 2010 | Syntax:
C++ | Size: 1.36 KB | Hits: 79 | Expires: Never
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long llint;
const llint inf = 100000000000000000LL;
int n;
struct matrix {
llint a[102][102];
matrix() {};
friend matrix operator * ( const matrix &a, const matrix &b ) {
matrix r;
for( int i = 0; i < n; ++i )
for( int j = 0; j < n; ++j ) {
r.a[i][j] = inf;
for( int k = 0; k < n; ++k )
r.a[i][j] = min( r.a[i][j], a.a[i][k]+b.a[k][j] );
}
return r;
}
};
int v[1002];
matrix a[64];
int main( void ) {
llint t;
scanf( "%d %lld", &n, &t );
for( int i = 0; i < n; ++i ) {
int k, y, x;
scanf( "%d %d", &k, &y );
for( int j = 0; j < n; ++j )
a[0].a[i][j] = inf;
for( int j = 0; j < k; ++j )
scanf( "%d", v+j );
for( int j = 0; j < k; ++j ) {
scanf( "%d", &x ); --v[j];
a[0].a[i][ v[j] ] = min( a[0].a[i][ v[j] ], llint( x+y ) );
}
}
int s = 0;
while( (1LL<<s) < t ) a[s+1] = a[s]*a[s], s++;
matrix w;
memset( w.a, 0, sizeof( w.a ) );
llint ans = 0;
for( int i = s; i >= 0; --i ) {
matrix q = w;
q = q*a[i];
llint f = inf;
for( int j = 0; j < n; ++j )
for( int k = 0; k < n; ++k )
f = min( f, q.a[j][k] );
if( f <= t ) w = q, ans += (1LL<<i);
}
printf( "%lld\n", ans );
return 0;
}