比赛 期末考试3 评测结果 AAAWAAAAWAAAAAAAAAAAWWWWAWWWWAWWWWAWWWWWWWWWAAAAAAAAAAWAAAAAAAAAAAAAA
题目名称 hope I can sort matrix 最终得分 69
用户昵称 2_16鸡扒拌面 运行时间 12.892 s
代码语言 C++ 内存使用 60.45 MiB
提交时间 2026-02-11 11:24:08
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

const int N=1000005;
int n,m;
vector<int> a[N],b[N];
int rmin[N],rmax[N];

int main(){
    freopen("hopeicansortmatrix.in","r",stdin);
    freopen("hopeicansortmatrix.out","w",stdout); 
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=0;i<n;i++){
        a[i].resize(m);
        for(int j=0;j<m;j++){
            cin>>a[i][j];
            if(a[i][j]==0)a[i][j]=1;
        }
    }
    for(int i=0;i<n;i++){
        b[i]=a[i];
        sort(b[i].begin(),b[i].end());
        rmin[i]=b[i][0];
        rmax[i]=b[i][m-1];
    }
    vector<int> ord(n);
    for(int i=0;i<n;i++)ord[i]=i;
    sort(ord.begin(),ord.end(),[&](int x,int y){
        return rmin[x]<rmin[y];
    });
    for(int i=1;i<n;i++){
        if(rmax[ord[i-1]]>rmin[ord[i]]){
            cout<<"No"<<endl;
            return 0;
        }
    }
    vector<pair<int,int> > edges;
    for(int i=0;i<n;i++){
        vector<pair<int,int> > tmp;
        for(int j=0;j<m;j++)tmp.push_back(make_pair(a[i][j],j));
        sort(tmp.begin(),tmp.end());
        for(int j=1;j<m;j++){
            if(tmp[j-1].first<tmp[j].first)
                edges.push_back(make_pair(tmp[j-1].second,tmp[j].second));
        }
    }
    vector<vector<int> > g(m);
    vector<int> ind(m,0);
    for(int i=0;i<edges.size();i++){
        int u=edges[i].first,v=edges[i].second;
        g[u].push_back(v);
        ind[v]++;
    }
    vector<int> q;
    for(int i=0;i<m;i++)if(ind[i]==0)q.push_back(i);
    for(int i=0;i<q.size();i++){
        int u=q[i];
        for(int j=0;j<g[u].size();j++){
            int v=g[u][j];
            ind[v]--;
            if(!ind[v])q.push_back(v);
        }
    }
    if(q.size()==m) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    return 0;
}