社区讨论

42求调

P9954 [USACO20OPEN] Cowntact Tracing B参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj2455j
此快照首次捕获于
2025/11/03 19:28
4 个月前
此快照最后确认于
2025/11/03 19:28
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF 1e18
using namespace std;
struct zzz{
	int t,x,y;
};
zzz a[255];

bool cmp(zzz u,zzz v){
	return u.t<v.t;
}
int n,T;
string s;
int cs[105];
signed main(){
	cin>>n>>T;
	cin>>s;
	for(int i=1;i<=T;i++) cin>>a[i].t>>a[i].x>>a[i].y;
	sort(a+1,a+1+T,cmp);
	int g=0;
	int minn=INF,maxn=-INF;
	int ans=0;
	for(int i=1;i<=n;i++){
		bool f=0;
		for(int j=0;j<=T+1;j++){
			bool f2=1;
			memset(cs,-1,sizeof cs);
			cs[i]=j;//每次以i作为0号病人,传染j次 
			for(int k=1;k<=T;k++){
				if(cs[a[k].x]==-1&&cs[a[k].y]>0){//y还能传染,x没被传染 
					cs[a[k].y]--;//传染
					cs[a[k].x]=k;
				}
				else if(cs[a[k].y]==-1&&cs[a[k].x]>0){
					cs[a[k].x]--;
					cs[a[k].y]=k;
				}
				else if(cs[a[k].x]>=0&&cs[a[k].y]>=0){
					cs[a[k].x]=max(0LL,cs[a[k].x]-1);
					cs[a[k].y]=max(0LL,cs[a[k].y]-1);
				}
			}
			for(int k=1;k<=n;k++){
				//检查
				if(s[k-1]=='1'&&cs[k]==-1||s[k-1]=='0'&&cs[k]!=-1){
					f2=0;
				} 
			}
			if(f2){
				minn=min(minn,j);
				maxn=max(maxn,j);
				f=1;
			} 
		}
		ans+=f;
	}
	cout<<ans<<" "<<minn;
	if(maxn>=T+1){
		cout<<" Infinity"<<endl;
	}
	else{
		cout<<" "<<maxn<<endl;
	}
	return 0;
}


//4 3
//1110
//5 1 2
//6 1 3
//7 1 4

回复

0 条回复,欢迎继续交流。

正在加载回复...