Submission #111483

# Submission time Handle Problem Language Result Execution time Memory
111483 2019-05-15T12:55:26 Z Segtree Travelling Merchant (APIO17_merchant) C++14
0 / 100
1000 ms 2040 KB
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define chmax(a,b) a=max(a,b);
#define chmin(a,b) a=min(a,b);
#define N 110
#define K 1010
ll n,m,k,d[N][N],v[N][N];
ll s[N][K],b[N][K];
void wf(){
    for(int r=1;r<=n;r++){
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){
	    d[i][j]=min(d[i][j],d[i][r]+d[r][j]);
	}
    }
}

ll dist[N];
bool judge(ll t,ll start){
    for(int i=1;i<=n;i++)dist[i]=1e17; dist[start]=0;
    for(int u=0;u<=N;u++){
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=n;j++)if(i!=j){
		if(v[i][j]<-1e16||d[i][j]>1e16)continue;
		ll ne=dist[i]-(v[i][j]-t*d[i][j]);
		if(j==start&&ne<=0)return 1;
		chmin(dist[j],ne);
	    }
	}
    }
    return 0;
}
bool solve(ll t){
    for(int i=1;i<=n;i++)if(judge(t,i))return 1;
    return 0;
}

int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){
	d[i][j]=1e17;
	v[i][j]=-1e17;
    }
    for(int i=1;i<=n;i++){
	for(int j=0;j<k;j++){
	    cin>>b[i][j]>>s[i][j];
	    if(b[i][j]==-1)b[i][j]=1e12;
	    if(s[i][j]==-1)s[i][j]=-1e12;
	    d[i][i]=0;
	}
    } 
    for(int i=0;i<m;i++){
	ll x,y,z;cin>>x>>y>>z;
	d[x][y]=z;
    }
    wf();
    /*
    for(int i=1;i<=n;i++){
	cout<<i<<":";
	for(int j=1;j<=n;j++)cout<<d[i][j]<<" ";
	cout<<endl;
    }*/
    for(int r=1;r<=n;r++){
	for(int i=1;i<=n;i++){
	    ll ma=0;
	    for(int j=0;j<k;j++){
		if(b[1][j]==-1)continue;
		ma=max(ma,s[i][j]-b[r][j]);
	    }
	    v[r][i]=ma;
	}
    }
    ll l=0,r=1e17,mid;
    while(l<r-1){
	mid=(l+r)/2;
	if(solve(mid))l=mid;
	else r=mid;
    }
    cout<<l<<endl;
    return 0;
}

Compilation message

merchant.cpp: In function 'bool judge(ll, ll)':
merchant.cpp:21:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
     for(int i=1;i<=n;i++)dist[i]=1e17; dist[start]=0;
     ^~~
merchant.cpp:21:40: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
     for(int i=1;i<=n;i++)dist[i]=1e17; dist[start]=0;
                                        ^~~~
# Verdict Execution time Memory Grader output
1 Incorrect 79 ms 2040 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1066 ms 868 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 1408 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1066 ms 868 KB Time limit exceeded
2 Halted 0 ms 0 KB -