답안 #111480

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
111480 2019-05-15T12:53:46 Z Segtree 여행하는 상인 (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]==-1e17)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;
                                        ^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 75 ms 2040 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1055 ms 896 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 1536 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1055 ms 896 KB Time limit exceeded
2 Halted 0 ms 0 KB -