WA15分求条

#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;
}

image

1 个赞

建议你的vis用map @卡皮巴拉 @卡皮巴拉

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 个赞

连大佬,你真升了啊 :smiling_face_with_tear:

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 个赞