rt,CF 看不到数据 /fn
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, cnt;
struct edge {int u, v, c, w;} e[N];
vector <int> v[N], g[N];
inline void add(int u, int v)
{
g[u].push_back(v);
g[v^1].push_back(u^1);
}
int tot, num[N], low[N], of[N], dfn;
stack <int> sta;
void dfs(int u)
{
low[u] = num[u] = ++dfn;
sta.push(u);
for (int v : g[u])
{
if (!num[v]) dfs(v), low[u] = min(low[u], low[v]);
else if (!of[v]) low[u] = min(low[u], num[v]);
}
if (num[u] == low[u])
{
tot++;
int v;
do v = sta.top(), sta.pop(), of[v] = tot;
while (v != u);
}
}
map <int, int> mp;
bool check(int x)
{
for (int i = 1; i <= m; i++) if (e[i].w > x) g[i<<1].push_back(i<<1^1);
for (int i = 1; i < N; i++) num[i] = low[i] = of[i] = 0;
tot = dfn = 0;
for (int i = 1; i < N; i++) if (!num[i]) dfs(i);
for (int i = 1; i <= m; i++) if (e[i].w > x) g[i<<1].pop_back();
for (int i = 1; i <= m; i++)
if (of[i<<1] == of[i<<1^1]) return 0;
return 1;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> e[i].u >> e[i].v >> e[i].c >> e[i].w;
v[e[i].u].push_back(i); v[e[i].v].push_back(i);
}
cnt = m;
for (int i = 1; i <= n; i++)
{
mp.clear();
for (int j = 0; j < (int)v[i].size(); j++)
{
int id = v[i][j]; cnt++;
if (!mp.count(e[id].c)) mp[e[id].c] = id;
else if (mp[e[id].c] == -1) return cout << "No\n", 0;
else add(id << 1 ^ 1, mp[e[id].c] << 1), mp[e[id].c] = -1;
add(id << 1, cnt << 1);
if (j) add((cnt - 1) << 1, cnt << 1), add((cnt - 1) << 1, id << 1 ^ 1);
}
}
int l = 1, r = 1e9, mid, ans = 2e9;
while (l <= r)
{
mid = l + r >> 1;
if (check(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
if (ans > 1e9) return cout << "No\n", 0;
check(ans); cout << "Yes\n" << ans << " ";
int qwq = 0;
for (int i = 1; i <= m; i++) if (of[i<<1] < of[i<<1^1]) qwq++;
cout << qwq << "\n";
for (int i = 1; i <= m; i++) if (of[i<<1] < of[i<<1^1]) cout << i << " ";
return 0;
}