社区讨论

juruo救助 T掉一个点

P1983[NOIP 2013 普及组] 车站分级参与者 5已保存回复 11

讨论操作

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

当前回复
11 条
当前快照
1 份
快照标识符
@mi7wjkwd
此快照首次捕获于
2025/11/21 04:46
4 个月前
此快照最后确认于
2025/11/21 06:34
4 个月前
查看原帖
CPP
#include<iostream>
#include<vector>
#include<queue>

using namespace std;
int n, m, t[1010];
int level[1010], ru[1010];
bool edg[1010][1010];
struct Node{
	int from;
	int to;
};
vector<Node> edges[1010];
queue<int> q;

void bfs(){
	for(int i=1;i<=n;i++){
		if(ru[i]==0){
			q.push(i);
			level[i]=1;
		}
	}
	while(!q.empty()){
		int top=q.front(); q.pop();
		for(int i=0;i<edges[top].size();i++){
			int t=edges[top][i].to;
			ru[t]--;
			if(ru[t]==0){
				level[t]=level[top]+1;
				q.push(t);
			}
		}
	}
	return;
}

int main(){
	cin >> n >> m;
	for(int i=0;i<m;i++){
		memset(t, 0, sizeof(t));
		int s;
		cin >> s;
		int a, from=0x3f3f;
		for(int j=0;j<s;j++){
			cin >> a;
			if(a<from) from=a; 
			t[a]=true;
		}
		for(int j=from;j<=a;j++){
			if(!t[j]) continue;
			for(int k=from;k<=a;k++){
				if(t[k]) continue;
				if(edg[k][j]) continue;
				edg[k][j]=true;
				Node b;
				b.from=k;
				b.to=j;
				edges[b.from].push_back(b);
				ru[j]++;
			}
		}
	}
//	for(int i=1;i<=n;i++) cout << ru[i] << " ";
	bfs();
//	cout << endl;
//	for(int i=1;i<=n;i++) cout << level[i] << " ";
//	cout << endl;
//	for(int i=1;i<=n;i++){
//		cout << i << ": ";
//		for(int j=0;j<edges[i].size();j++){
//			cout << edges[i][j].to << " ";
//		}
//		cout << endl;
//	}
	int max=0;
	for(int i=1;i<=n;i++) if(level[i]>max) max=level[i];
	cout << max << endl;
	return 0;
}
求巨佬帮忙看看如何优化

回复

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

正在加载回复...