同样代码if(k == n * m - 1)break;对了
if(k >= n * m - 1)break;
就不对了不理解求解答 完整代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 500005;
int n, m, k;
ll edg1[N], edg2[N], ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i ++)//横向
{
cin >> edg1[i];
}
for(int i = 1; i <= m; i ++)//纵向
{
cin >> edg2[i];
}
sort(edg1 + 1, edg1 + 1 + n);
sort(edg2 + 1, edg2 + 1 + m);
int heng = 1, zong = 1;//已经加了几条横的边
ans = ans + edg1[1] * (m - 1) + edg2[1] * (n - 1);
k = n + m - 2;
edg1[n + 1] = edg2[m + 1] = 0x7fffffff;
int l = 2, r = 2;
while(1)
{
if(edg1[l] <= edg2[r])//用横向
{
k += m - zong;
ans = ans + edg1[l] * (m - zong);
heng ++;
l ++;
}
else//用纵向
{
k += n - heng;
ans = ans + edg2[r] * (n - heng);
zong ++ ;
r ++ ;
}
if(k == n * m - 1)break;
}
cout << ans;
return 0;
}