【悬赏 5 关】WA 求调
  • 板块UVA1389 Hard Life
  • 楼主zhlzt
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/7/31 10:56
  • 上次更新2025/7/31 15:41:05
查看原帖
【悬赏 5 关】WA 求调
571147
zhlzt楼主2025/7/31 10:56

好多写法都试过了就是 A 不了。

玉玉了。

#include<bits/stdc++.h>
using namespace std;
const int maxn=110,maxm=3000;
const double eps=1e-8;
int deg[maxn],dep[maxn],sta[maxn];
int secu[maxm],secv[maxm],n,m,s,t,idx;
int pos[maxm],nxt[maxm],head[maxn],cur[maxn];
double cap[maxm];
inline void add(int u,int v,double w){
	pos[++idx]=v,cap[idx]=w;
	nxt[idx]=head[u],head[u]=idx;
}
inline bool bfs(){
	for(int i=1;i<=t;i++) dep[i]=0;
	queue<int>que;
	que.push(s);
	dep[s]=1;
	int u,v;
	while(que.size()){
		u=que.front(); que.pop();
		for(int i=head[u];i;i=nxt[i]){
			v=pos[i];
			if(cap[i]>eps and !dep[v]){
				dep[v]=dep[u]+1;
				que.push(v);
			}
		}
	}
	return dep[t]!=0;
}
double dfs(int u,double f){
	if(u==t or !f) return f;
	double res=0,tmp;
	int v;
	for(int &i=cur[u];i;i=nxt[i]){
		v=pos[i];
		if(cap[i]>eps and dep[v]==dep[u]+1 and (tmp=dfs(v,min(f,cap[i])))>eps){
			res+=tmp,f-=tmp;
			cap[i]-=tmp,cap[i^1]+=tmp;
			if(f==0) return res;
		}
	}
	return res;
}
inline bool check(double mid){
	idx=1,s=n+1,t=n+2;
	for(int i=1;i<=t;i++) head[i]=0;
	int u=2*m;
	for(int i=1;i<=n;i++){
		add(i,t,u+2*mid-deg[i]);
		add(t,i,0);
		add(s,i,u);
		add(i,s,0);
	}
	for(int i=1;i<=m;i++){
		add(secu[i],secv[i],1);
		add(secv[i],secu[i],1);
	}
	double res=0;
	while(bfs()){
		memcpy(cur,head,sizeof(int)*(t+1));
		res+=dfs(s,1e9);
	}
	return res-u*n<-eps;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	while(cin>>n>>m){
		if(m==0){
			cout<<"1\n1\n";
			continue;
		}
		for(int i=1;i<=n;i++) deg[i]=0;
		for(int i=1;i<=m;i++){
			cin>>secu[i]>>secv[i];
			deg[secu[i]]++,deg[secv[i]]++;
		}
		double l=1.0/n,r=m,mid=0;
		while(r-l>eps){
			mid=(l+r)/2;
			if(check(mid)) l=mid;
			else r=mid;
		}
		bfs();
		int top=0;
		for(int i=1;i<=n;i++){
			if(dep[i]) sta[++top]=i;
		}
		if(!top){
			cout<<"1\n1\n";
			continue;
		}
		cout<<top<<"\n";
		for(int i=1;i<=top;i++) cout<<sta[i]<<"\n";
	}
	return 0;
}
2025/7/31 10:56
加载中...