社区讨论
10pts 2WA 3TLE求调玄关
P2196[NOIP 1996 提高组] 挖地雷参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m6rqmj7z
- 此快照首次捕获于
- 2025/02/05 18:00 去年
- 此快照最后确认于
- 2025/02/05 18:05 去年
CPP
#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;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...