Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
51633 | Hyper5Q | 最优子图 | C++ | 运行出错 | 0 | 0 MS | 236 KB | 1169 | 2022-07-13 12:20:19 |
#include<bits/stdc++.h> using namespace std; struct NODE { int line; }; const int N=505; long long dis[N][N]; long long re_dis[N][N]; long long n; long long light,dark; long long k; long long answer=0; long long p[N]; priority_queue<NODE>G; bool operator<(const NODE& a,const NODE& b) { return p[a.line]<p[b.line]; } int main() { freopen("sub.in","r",stdin); freopen("sub.out","w",stdout); scanf("%lld%lld",&n,&k); for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { scanf("%lld",&dis[i][j]); re_dis[i][j]=k-dis[i][j]; if(dis[i][j]==0)re_dis[i][j]=0; } } for(int j=1;j<=n;++j) { for(int i=1;i<=n;++i) { p[j]+=re_dis[i][j]; } G.push(NODE{j}); } for(int Q=1;Q<n;++Q) { NODE node=G.top(); G.pop(); for(int i=1;i<=n;++i)if(dis[i][node.line]!=0)dis[i][node.line]=k-dis[i][node.line]; for(int j=1;j<=n;++j)if(dis[node.line][j]!=0)dis[node.line][j]=k-dis[node.line][j]; long long ret=0; for(int j=1;j<=n;++j) { p[j]=0; for(int i=1;i<=n;++i) { p[j]+=dis[i][j]; ret+=dis[i][j]; } } answer=max(answer,ret/2); } cout<<answer<<endl; }