#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
bool vis[1001];
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2;
}
1 个赞
差不多吧
2 个赞
题面看不清
1 个赞
10. 车站分级
题目ID:20224必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
15 分
时间限制: 1000ms
空间限制: 128000kB
题目描述
一条单向的铁路线上,依次有编号为 1,2,…,n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。
注意:起始站和终点站自然也算作事先已知需要停靠的站点。
例如,下表是 5 趟车次的运行情况。其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求。
现有 m 趟车次的运行情况(全部满足要求),试推算这 n 个火车站至少分为几个不同的级别。
输入格式
第一行包含 2 个正整数 n,m,用一个空格隔开。
第 i+1i+1 行 (1≤i≤m) 中,首先是一个正整数 si (2≤si≤n),表示第 i 趟车次有 sisi 个停靠站;接下来有 si 个正整数,表示所有停靠站的编号,从小到大排列。每两个数之间用一个空格隔开。输入保证所有的车次都满足要求。
输出格式
一个正整数,即 n 个火车站最少划分的级别数。
1 个赞
不一样啊,你试试,我不知道a[i]的取值范围,反正不知1000
1 个赞
十五分依旧
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
map<int,bool>vis;
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2;
}
1 个赞
你好,手上问题有点多,给我点时间
1 个赞
(帖子已被作者删除)
1 个赞
vis每个循环标记重置一下试一试
1 个赞
CE了
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
map<int,bool>vis;
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
for(auto i:vis) i=0;
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2;
}
1 个赞
这的问题
1 个赞
这是啥??你要么i.first要么i.second,怎么键值对一起呢
1 个赞
连大佬,你真升了啊
1 个赞
还是15qwq
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
map<int,bool>vis;
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
for(auto i:vis) i.second=0;
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2;
}
1 个赞
dui
1 个赞
太豪了,是RE,我们没救了
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1001];
int n,m,in[1001],ma,x,a[1001];
map<int,bool>vis;
queue<int>q;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x;
for(int i=1;i<=x;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
for(int j=1;j<=x;j++){
in[a[j]]++;
v[i].push_back(a[j]);
}
}
}
vis.clear();
}
for(int i=1;i<=n;i++) if(in[i]==0) q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++){
int y=v[x][i];
in[y]--;
if(in[y]==0) q.push(y);
}
int s=q.size();
ma=max(s,ma);
}
cout<<ma/2+1;
}
1 个赞
gdb,启动!!
1 个赞
啥玩意
1 个赞
(帖子已被作者删除)
1 个赞