题意:有n个开关和m盏灯,给定一个矩阵a,若a[i][j]==1则说明开关i与第j盏灯连接.初始时所有灯都是关闭的.按下某开关后,所有与这个开关连接的灯将会打开,已经打开的不会关闭.
现在你需要去掉一个开关,使得按下剩余n−1个开关后,所有灯都可以打开.若存在方案,则输出YES,否则输出NO.
思路:存下每个开关可以控制的灯,存下每个灯可以被多少个开关控制,然后暴力枚举去掉每一个开关,如果去掉某个开关后,所有的灯还是都可以被打开,那么就是YES。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
int n, m;
vector<int> G[MAXN];
map<int, int> mp;
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
char s[2005]; scanf("%s", s);
for (int j = 0; j < m; j++)
{
if (s[j] == '1')
{
G[i].push_back(j);
mp[j]++;
}
}
}
bool flag = false;
for (int i = 0; i < n; i++)
{
bool flag2 = true;
for (int j = 0; j < G[i].size(); j++)
{
if (mp[G[i][j]] - 1 == 0) { flag2 = false; break; }
}
if (flag2) { flag = true; break; }
}
if (flag) printf("YES\n");
else printf("NO\n");
return 0;
}