Pagini recente » Cod sursa (job #2737731) | Cod sursa (job #2128192) | Cod sursa (job #508026) | Cod sursa (job #2487547) | Cod sursa (job #2456335)
#include <bits/stdc++.h>
#define MAX_N 100000
#define MAX_M 300000
using namespace std;
struct muchie
{
int a, b, c, i;
};
muchie v[MAX_M + 1];
vector <pair<int, int>> rez;
vector <int> g[MAX_N + 1];
void add(int a, int b)
{
g[a].push_back(b);
}
int ctc;
int idx[MAX_N + 1];
int d[MAX_N + 1];
int comp[MAX_N + 1];
bool on[MAX_N + 1];
int stkLen;
int stk[MAX_N + 1];
bool viz[MAX_N + 1];
int n, m;
int s, dd;
void readFile()
{
ifstream f("tarnacop.in");
f >> n >> m >> s >> dd;
for(int i = 1; i <= m; i ++)
{
int a, b, c, ii;
f >> a >> b >> c >> ii;
v[i] = {a, b, c, ii};
if(ii > 0)
add(b, a);
if(c > ii)
add(a, b);
}
f.close();
}
int depth;
void dfs(int a)
{
depth ++;
idx[a] = d[a] = depth;
viz[a] = 1;
stk[++ stkLen] = a;
on[a] = 1;
for(auto u : g[a])
{
if(viz[u] == 0)
{
dfs(u);
d[a] = min(d[a], d[u]);
}
else
if(on[u] == 1)
d[a] = min(d[a], d[u]);
}
if(d[a] == idx[a])
{
ctc ++;
int cr = 0;
do
{
cr = stk[stkLen];
comp[cr] = ctc;
on[cr] = 0;
stkLen --;
}
while(cr != a);
}
}
void solve()
{
for(int i = 1; i <= n; i ++)
{
if(viz[i] == 0)
dfs(i);
}
for(int i = 1; i <= m; i ++)
{
if(v[i].i > 0 && v[i].i == v[i].c && !(comp[v[i].a] == comp[v[i].b]/* && comp[v[i].b] == comp[dd]*/))
rez.push_back({v[i].a, v[i].b});
}
sort(rez.begin(), rez.end());
}
void printFile()
{
ofstream g("tarnacop.out");
g << rez.size() << "\n";
for(int i = 0; i < rez.size(); i ++)
g << rez[i].first << " " << rez[i].second << "\n";
g.close();
}
int main()
{
readFile();
solve();
printFile();
return 0;
}