Pagini recente » Cod sursa (job #1414445) | Cod sursa (job #206448) | Cod sursa (job #2615640) | Cod sursa (job #542911) | Cod sursa (job #2831845)
#include <fstream>
#include <vector>
using namespace std;
const int N = 8200;
vector<int> gr[2 * N];
pair<int, int> dp[2 * N];
bool viz[2 * N];
void dfs(int nod) {
viz[nod] = true;
dp[nod].second = 1;
for (auto nxt: gr[nod]) {
if (viz[nxt]) continue;
dfs(nxt);
dp[nod].first += max(dp[nxt].first, dp[nxt].second);
dp[nod].second += dp[nxt].first;
}
}
int main() {
ifstream cin("felinare.in");
ofstream cout("felinare.out");
int n, m;
cin >> n >> m;
while (m--) {
int x, y;
cin >> x >> y;
x = 2 * x;
y = 2 * y + 1;
gr[x].push_back(y);
gr[y].push_back(x);
}
cin.close();
int ans = 0;
for (int i = 2; i <= 2 * n + 1; ++i)
if (!viz[i]) {
dfs(i);
ans += max(dp[i].first, dp[i].second);
}
cout << ans << "\n";
cout.close();
return 0;
}