| 比赛 |
期末考试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;
}