求助输入问题
查看原帖
求助输入问题
398310
hundunqidian楼主2023/6/16 13:07

如果代码77行用cin>>k;输入k值,会爆零

但使用scanf("%lf",&k);就没有问题

请问是什么原因?

#include<bits/stdc++.h>
using namespace std;
inline int rd(){
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int const X=1e5+100;
int n,u,v;
double k;
vector<int> e[X];
int in[X],c[X],cnt_c;
bool p[X];
void find(int u,int father){
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i];
		if(v==father || p[v]) continue;
		if(in[v]==2){
			p[v]=1;
			c[++cnt_c]=v;
			find(v,u);
			break;
		}
	}
	return ;
}
void topo(){
	queue<int> q;
	for(int i=1;i<=n;i++){
		if(in[i]==1) q.push(i);
	}
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=0;i<e[u].size();i++){
			int v=e[u][i];
			in[v]--;
			if(in[v]==1) q.push(v);
		}
	}
	for(int i=1;i<=n;i++){
		if(in[i]==2){
			p[i]=1;
			c[++cnt_c]=i;
			find(i,-1);
			break ;
		}
	}
	return ; 
} 
int f[X][2],w[X];
void dfs(int u,int father){
	f[u][1]=w[u]; f[u][0]=0;
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i];
		if(v==father || p[v]) continue;
		dfs(v,u);
		f[u][1]+=f[v][0];
		f[u][0]+=max(f[v][0],f[v][1]);
	}
	return ;
}
int g[X][2],ans;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	n=rd();
	for(int i=1;i<=n;i++) w[i]=rd();
	for(int i=1;i<=n;i++){
		u=rd(); v=rd();
		u++;v++;
		in[u]++; in[v]++;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	scanf("%lf",&k);//cin>>k; //会全部WA 
	topo();
	for(int i=1;i<=cnt_c;i++){
		dfs(c[i],-1);
	}
	memset(g,-0x3f,sizeof(g));
	g[1][0]=f[c[1]][0];
	for(int i=2;i<=cnt_c;i++){
		g[i][1]=g[i-1][0]+f[c[i]][1];
		g[i][0]=max(g[i-1][1],g[i-1][0])+f[c[i]][0];
	} 
	ans=max(g[cnt_c][1],g[cnt_c][0]);
	memset(g,-0x3f,sizeof(g));
	g[1][1]=f[c[1]][1];
	for(int i=2;i<=cnt_c;i++){
		g[i][1]=g[i-1][0]+f[c[i]][1];
		g[i][0]=max(g[i-1][1],g[i-1][0])+f[c[i]][0];
	}
	ans=max(ans,g[cnt_c][0]);
	cout<<fixed<<setprecision(1)<<(double)ans*k<<endl;
	return 0;
}

感谢.JPG

2023/6/16 13:07
加载中...