对于每种球,一定要有一个箱子所容纳的球的数量等于该类球的数量,才能保证同种球都在一个箱子里且该箱子中没有其他球
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <vector>
#include <math.h>
#include <stack>
#include <map>
using namespace std;
const int MAX = 100+10;
const double eps = 1e-10;
const double PI = acos(-1.0);
int n, t, m[MAX][MAX];
bool vis[MAX], vis2[MAX];
bool check()
{
for(int i = 0; i<n; ++i)
if(!vis[i]||!vis2[i])return 0;
return 1;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d", &n);
memset(m,0,sizeof(m));
for(int i = 0; i<n; ++i)
for(int j = 0; j<n; ++j)
{
scanf("%d", &m[i][j]);
m[n][i]+=m[i][j];
m[j][n]+=m[i][j];
}
memset(vis, 0, sizeof(vis));
memset(vis2, 0, sizeof(vis2));
for(int i = 0; i<n; ++i)
{
if(vis[i])continue;
for(int j = 0; j<n; ++j)
{
if(vis2[j])continue;
if(m[n][i]==m[j][n]&&!vis[i]&&!vis2[j])
{
vis[i] = 1;
vis2[j] = 1;
break;
}
}
}
if(check())printf("Possible\n");
else printf("Impossible\n");
}
return 0;
}