10pts 2WA 3TLE求调玄关
查看原帖
10pts 2WA 3TLE求调玄关
1493035
Aurora_awa楼主2025/2/5 17:59
#include <bits/stdc++.h>
#define LL long long
#define endl '\n'
#define Aurora main
#define pb push_back
using namespace std;
int N,T,num[100001],r=0,mine[100001],mm=-1,mc,c;
int tu[201][201],f[10005],ind[300],so[300],dp[1000001],tran[300];
bool flag=0;
queue<int> q;
void topsort(){
	for(int i=1;i<=N;i++) if(!ind[i]) q.push(i);
	int temp;
	while(!q.empty()){
		temp=q.front();
		so[++r]=temp;
		q.pop();
		for(int i=1;i<=N;i++){
			if(tu[temp][i]){
				ind[i]--;
				if(!ind[i]) q.push(i);
			}
		}
	}
}
int Aurora(){
    // ios::sync_with_stdio(false);
	int a,b;
	scanf("%d",&N);
	for(int i=1;i<=N;i++) scanf("%d",&mine[i]);
	while(1){
		scanf("%d %d",&a,&b);
		if(!a&&!b) break;
		tu[a][b]=1;
		ind[b]++;
		// fa[b]=a;
	}
	topsort();
	for(int i=1;i<=N;i++) if(!ind[i]) dp[i]=mine[i];
	for(int i=1;i<=r;i++){
		for(int j=1;j<=N;j++){
			if(tu[so[i]][j]){
				if(dp[j]<dp[i]+mine[j]){
					dp[j]=dp[i]+mine[j];
					tran[j]=i;
				}
			}
		}
	}
	for(int i=1;i<=N;i++) {
		if(dp[i]>mm){
			mm=dp[i];
			mc=i;
		}
	}
	stack<int> s;
	while(mc){
		s.push(mc);
		T++;
		mc=tran[mc];
	}
	for(int i=1;i<=T;i++){
		cout<<s.top();
		s.pop();
		if(i!=T) cout<<'-';
	}
	cout<<endl;
	cout<<mm<<endl;
	return 0;
}


2025/2/5 17:59
加载中...