求调o(╥﹏╥)o[P2656 采蘑菇]
  • 板块灌水区
  • 楼主CaiYuifei
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 13:23
  • 上次更新2024/11/23 15:43:39
查看原帖
求调o(╥﹏╥)o[P2656 采蘑菇]
1209720
CaiYuifei楼主2024/11/23 13:23

求调o(╥﹏╥)oP2656 采蘑菇
30pts 数据小了 (つД`)・゚・

#include<bits/stdc++.h>
using namespace std;
int n,m,kk=0,ss,maxx=0,qq=0,miao[80050],v[80500],b[80500],aa[80500],vv[80500],v2[80500],dfn[80500],low[80500],c[80500],vt[80050],jj=0,gg;
struct pt{
	int u;
	int mg;
	double kk; 
};
vector<pt>g[80050];
vector<pt>p[80050];
stack<int>s;
queue<int>q;
void spfa(int sz){
	memset(vv,-1,sizeof(vv));
	vv[sz]=vt[c[sz]];
	aa[sz]=1;
	q.push(sz);
	while(q.size()){
		int z=q.front();
		q.pop();
		aa[z]=0;
		for(int i=0;i<p[z].size();i++){
			if(vv[p[z][i].u]<=vv[z]+p[z][i].mg+vt[p[z][i].u]){
				
				vv[p[z][i].u]=vv[z]+p[z][i].mg+vt[p[z][i].u];
				if(!aa[p[z][i].u]){
					aa[p[z][i].u]=1;
					q.push(p[z][i].u);
				}
			}
		}
	}
}
void tarjan(int z){
	dfn[z]=low[z]=++jj;
	s.push(z);
	b[z]=1;
	for(int i=0;i<g[z].size();i++){
		if(dfn[g[z][i].u]==0){
			tarjan(g[z][i].u);
			low[z]=min(low[z],low[g[z][i].u]);
		}
		else if(b[g[z][i].u]==1){
			low[z]=min(low[z],low[g[z][i].u]);
		}
	}
	int a;
	if(dfn[z]==low[z]){//qq++;
		while(1){
			a=s.top();
			//cout<<qq<<' '<<a<<endl;
			s.pop();
			b[a]=0;
			c[a]=z;
			if(a==z){
				break;
			}
			//cout<<v[z]<<' '<<v[a]<<' '<<a<<endl;
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,vz,vj;
		double k;
		cin>>x>>y>>vz>>k;
		g[x].push_back({y,vz,k*10});
	}
	cin>>ss;
	for(int i=1;i<=n;i++){
		if(dfn[i]==0){
			tarjan(i); 
		} 
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<g[i].size();j++){	
			//cout<<c[i]<<' '<<c[g[i][j].u]<<endl;
			if(c[i]!=c[g[i][j].u]){
			
			//cout<<c[i]<<' '<<c[g[i][j].u]<<endl;
				p[c[i]].push_back({c[g[i][j].u],g[i][j].mg,g[i][j].kk});
			}
			else{
				int z=g[i][j].mg;
				while(z){
					vt[c[i]]+=z;
					z=z*g[i][j].kk/10;
				}
				
			}
		}
	}
	spfa(ss);
	for(int i=1;i<=n;i++){
		 maxx=max(maxx,vv[i]);
		 //cout<<vv[i]<<endl;
	}
	cout<<maxx;
	return 0;
} 
2024/11/23 13:23
加载中...