社区讨论
求助,定给您点关注
P1073[NOIP 2009 提高组] 最优贸易参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @loi8gqjw
- 此快照首次捕获于
- 2023/11/03 14:27 2 年前
- 此快照最后确认于
- 2023/11/03 18:48 2 年前
感觉很假的分层图做法(因为并不会)
WA了第12个点,很有可能做法不对(我个人觉得没问题)数据过水其它点混过去了
数据太大了不好推可以帮忙看看吗
谢谢!!!!!!!!!!!
CPP#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int N=1e5+5;
const int M=1e6+5;
int d[N*3];
queue<int> q;
int n,m;
int z[N];
vector<int> son[3*N];
bool cf[3*N];
void add(int x,int y){
son[x].push_back(y);
return ;
}
void bfs(int cs){
q.push(cs);
if(cs==1)d[1]=-1*z[1];
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<son[x].size();i++){
int y=son[x][i];
if(y<=n){
d[y]=max(d[x],-1*z[y]);
}else if(y>n&&y<=2*n){
d[y]=d[y-n]+z[y-n];
d[y]=max(d[x],d[y]);
d[y+n]=d[y];
}else{
d[y]=max(d[x],d[y]);
}
if(cf[y]==1)continue;
cf[y]=1;
q.push(y);
}
}
return ;
}
int x,y,pd;
int main(){
cin>>n>>m;
for(int i=1;i<=3*n;i++){
d[i]=-200;
}
for(int i=1;i<=n;i++){
cin>>z[i];
}
for(int i=1;i<=m;i++){
cin>>x>>y>>pd;
add(x,y);
add(x+n,y+n);
add(x+2*n,y+2*n);
if(pd==2){
add(y,x);
add(y+n,x+n);
add(y+2*n,x+2*n);
}
}
bfs(1);
bfs(1+n);
bfs(1+n*2);
cout<<d[3*n];
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...