救救我.py

我要祭出大招了

难道是!?。。。。

??啥意思??

没啥意思

image
我建议把ans取max的操作放在这里:
image

那最后输出啥呢???

ans啊

哇哈哈哈哈哈!!!!!!

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[1005], o[1005], in[1005], dp[1005], d[1005], vis[1005];
vector<ll> v[1005];
ll b[1005][1005];
int main(){
    ll n, m;
    cin >> n >> m;
    for(ll i=1;i<=m;i++){
        cin >> s[i];
        vis[s[i]]=1;
    }
    for(ll i=1;i<=n;i++){
        if(vis[i]) continue;
        for(ll j=1;j<=v[i].size();j++){
            if(!b[i][s[j]]){//如果没建边 (因为我们是需要从没到站的向到站的建边,题目说等级更高的一定进站,即是高级的指向低级的)
                in[s[j]]++;//低级的站台入度+1 
                // o[i]++;
                v[i].push_back(s[j]);//用vector建边
                // v[s[j]].push_back(i);
                // b[s[j]][i]=1;
                b[i][s[j]]=1;//标记已建边
            }
        }
     }
    queue<ll> q;
	for(ll i=1;i<=n;i++){
		if(in[i]==0){
            dp[i]=1;
			q.push(i);
		}
	}
    ll ans=0;
    
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		for(ll k:v[u]){	
            in[k]--;
            if(in[k]==0){ dp[k]=max(dp[u]+1,dp[k]);            ans=max(dp[k], ans);}
			if(in[k]==0) q.push(k);
		} // 不用vis数组!!!!
	}
    cout << ans;
}

你确定其他的没问题??

哇哈哈哈哈哈哈哈哈哈

有啊

tm第一个样例过了第二个美国(改了一下上面建边的双重循环)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[1005], o[1005], in[1005], dp[1005], d[1005], vis[1005];
vector<ll> v[1005];
ll b[1005][1005];
int main(){
    ll n, m;
    cin >> n >> m;
    for(ll i=1;i<=m;i++){
        cin >> s[i];
        vis[s[i]]=1;
    }
    for(ll i=1;i<=n;i++){
        if(vis[i]) continue;
        for(ll j=1;j<=n;j++){
            if(!b[i][s[j]]){//如果没建边 (因为我们是需要从没到站的向到站的建边,题目说等级更高的一定进站,即是高级的指向低级的)
                in[s[j]]++;//低级的站台入度+1 
                // o[i]++;
                v[i].push_back(s[j]);//用vector建边
                // v[s[j]].push_back(i);
                // b[s[j]][i]=1;
                b[i][s[j]]=1;//标记已建边
            }
        }
     }
    queue<ll> q;
	for(ll i=1;i<=n;i++){
		if(in[i]==0){
            dp[i]=1;
			q.push(i);
		}
	}
    ll ans=0;
    
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		for(ll k:v[u]){	
            in[k]--;
            if(in[k]==0){ dp[k]=max(dp[u]+1,dp[k]);            ans=max(dp[k], ans);}
			if(in[k]==0) q.push(k);
		} // 不用vis数组!!!!
	}
    cout << ans;
}

还是建边的问题
image
这是我的

快点,要下课了

len施舍么

len是啥

就是到了几个站

第一个样例还是没过,ε=(´ο`*)))唉,明天调吧